weblogic rmi驱动程序中的内存泄漏

时间:2019-02-12 15:15:47

标签: weblogic datasource jndi rmi weblogic-10.x

开始使用独立应用程序中的现有Weblogic数据源后,我们遇到了内存泄漏问题。独立应用程序和WL Datasource不在同一服务器上。我们正在通过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(远程方法调用)中,在远程使用后,问题本身开始出现。由于这两件事是同时发生的,因此我们怀疑在远程数据源使用过程中是否做错了什么。

一切正常,但是我们每2-3天重新启动一次节点,开始成为我们的负担。

此内存泄漏的原因可能是什么?我们应该更改数据源属性中的任何内容还是需要传递额外的JVM参数?

这是我们堆的快照

enter image description here

这是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 

1 个答案:

答案 0 :(得分:0)

我无法猜测您可以在相关代码中进行哪些更改,但是基于内存泄漏描述-这与使用非线程安全哈希表有关。 尝试使用ConcurrentHashMap可能会有所帮助。

请查看以下链接以获取更多详细信息:

https://support.oracle.com/knowledge/Middleware/1966075_1.html

https://javaeesupportpatterns.blogspot.com/2011/11/hashmap-thread-safe-problem-case-study.html