【发布时间】:2019-07-06 06:52:07
【问题描述】:
在我们开始使用独立应用程序中的现有 Weblogic 数据源后,我们遇到了内存泄漏问题。独立应用程序和 WL 数据源不在同一台服务器上。我们正在通过 t3 协议使用 JNDI 检索数据源。
我们在这里使用了这种方法。 https://docs.oracle.com/cd/E13222_01/wls/docs51/classdocs/API_jndi.html
87% 的堆分配给 weblogic/jdbc/rmi/internal/StructImpl_oracle_sql_STRUCT 对象。此对象位于包 RMI(远程方法调用)中,并且在此远程使用后问题本身开始出现。由于这两件事是同时发生的,所以我们怀疑是不是我们在远程Datasource使用过程中做错了什么。
一切正常,但我们每 2-3 天重启一次节点,开始成为我们的负担。
这种内存泄漏的原因可能是什么?我们应该更改数据源属性中的任何内容还是需要传递额外的 JVM 参数?
这是我们堆的快照
这是 weblogic 属性。
Weblogic major version 10.3.6.0
Patch level: 10.3.6.0.181016 (October 2018 PSU - GENM)
Java version: Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) - 1.6.0_45
MEM_ARGS="-Xms4096m -Xmx6144m -Xmn1024m -XX:SurvivorRatio=8 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:PermSize=256m -XX:MaxPermSi
ze=512m -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:${LOGDIR}/GC_logs.${SERVER_NAME} -XX:+UseGCLogFileRotation -XX
:+PrintGCDateStamps -XX:NumberOfGCLogFiles=100 -XX:GCLogFileSize=512M"
--- EXTRA JAVA OPTIONS
-DASA_MARK=ASA_VERSION_2016.02.17"
-Dweblogic.management.server=${ADMIN_URL}"
-DHostName_WLSName=${value_hostname}-${WLS_NAME}"
-Dweblogic.system.BootIdentityFile=${DOMAIN_HOME}/boot.properties"
-Dweblogic.rjvm.enableprotocolswitch=true"
-Djava.net.preferIPv4Stack=true"
这是我们的独立应用属性
[wlsadmin@machine1 cfg]$ /usr/java/jdk1.6.0_26/bin/java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
CLASSPATH=$CLASSPATH:$HOME/lib/wlfullclient.jar
[wlsadmin@machine1 META-INF]$ more MANIFEST.MF
Manifest-Version: 1.0
Implementation-Vendor: Oracle Corp.
Implementation-Title: JDK 1.6 Client jar for WebLogic Server 10.3 Tue
Nov 15 08:52:36 PST 2011 1441050
Implementation-Version: 10.3.6.0
CLASSPATH=$CLASSPATH:$HOME/lib/ojdbc5.jar
[wlsadmin@machine1 META-INF]$ more MANIFEST.MF
Manifest-Version: 1.0
Specification-Title: "Oracle Globalization Development Kit"
Class-Path: orai18n-mapping.jar orai18n-utility.jar orai18n-collation.
jar orai18n-translation.jar orai18n-net.jar orai18n-servlet.jar orai1
8n-lcsd.jar orai18n-tools.jar gdk_custom.jar
Created-By: 1.5.0_07 (Sun Microsystems Inc.)
Main-Class: oracle.i18n.util.GDKOracleMetaData
Implementation-Title: "orai18n.jar archives"
Specification-Vendor: "Oracle Corporation"
Specification-Version: "Oracle Globalization Development Kit - 11.2.0.
1.0 - Production, Build : 11"
Implementation-Version: "Oracle Globalization Development Kit -
-Xms64m -Xmx256m
【问题讨论】:
-
您是否检查过您的代码是否正确关闭了结果集、语句和连接?还有一件事,不要忘记此功能已被弃用,并将在 WebLogic 的下一版本中禁用。
-
@EmmanuelCollin 是的,我已经检查了所有内容,但没有发现任何可疑之处。它们都关闭得很好。我还从 weblogic 管理控制台监控了数据源,我看到没有连接泄漏。我听说它会失去支持,但由于这是一个遗留系统,我们可以在这个 weblogic 版本上保留至少 5 年......跨度>
-
您确定这是内存泄漏,而不仅仅是从数据库加载的大结果集?您是否有任何堆指标来确认内存泄漏?
-
查看 Weblogic 数据源的高级属性,即“Wrap Data Types”。如果已启用,则将其关闭,看看您是否获得了性能改进..
-
@EmmanuelCollin 我检查了 10.3.6 的已修复错误列表,我在那里看到了这个错误。我们可以说这个补丁包含在 10.3.6 中。我向 Oracle 开了一个 SR,毫无疑问他们一如既往地懒惰;他们所做的只是索取大量信息,却一无所获。顺便说一句,我今天和我们的操作人员交谈,他说他在禁用“包装数据类型”实用程序后忘记重新启动数据源,他说 GC 工作正常并且堆看起来稳定了 3 天。我不太确定是否是这种情况,但似乎问题已经消失了。下周我会告诉你的。
标签: weblogic datasource jndi rmi weblogic-10.x