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

weblogic rmi驱动程序中的内存泄漏,weblogic,datasource,jndi,rmi,weblogic-10.x,Weblogic,Datasource,Jndi,Rmi,Weblogic 10.x,在我们开始使用独立应用程序中现有的Weblogic数据源后,出现了内存泄漏问题。独立应用程序和WL数据源不在同一服务器中。我们正在通过t3协议使用JNDI检索数据源 我们使用了下面的方法。 堆的87%分配给weblogic/jdbc/rmi/internal/StructImpl\u oracle\u sql\u STRUCT对象。这些对象位于包RMI(远程方法调用)中,在远程使用之后,问题本身开始出现。由于这两件事同时发生,我们怀疑在远程数据源使用过程中是否做错了什么 一切正常,但我们每2-

在我们开始使用独立应用程序中现有的Weblogic数据源后,出现了内存泄漏问题。独立应用程序和WL数据源不在同一服务器中。我们正在通过t3协议使用JNDI检索数据源

我们使用了下面的方法。

堆的87%分配给
weblogic/jdbc/rmi/internal/StructImpl\u oracle\u sql\u STRUCT
对象。这些对象位于包RMI(远程方法调用)中,在远程使用之后,问题本身开始出现。由于这两件事同时发生,我们怀疑在远程数据源使用过程中是否做错了什么

一切正常,但我们每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 

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

请查看这些链接以了解更多详细信息:


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

请查看这些链接以了解更多详细信息:


您是否检查了代码是否正确关闭了结果集、语句和连接?还有一件事,别忘了此功能已被弃用,并将在下一版本的WebLogic中禁用。@EmmanuelCollin是的,我已检查了所有功能,但没有发现任何可疑之处。它们都关得很紧。我还从weblogic管理控制台监控了数据源,我发现没有连接泄漏。我听说它将失去支持,但由于这是一个遗留系统,我们可以在这个weblogic版本上保留至少5年……您确定这是内存泄漏,而不仅仅是从数据库加载的一个大结果集吗?您是否有任何堆指标来确认内存泄漏?请查看Weblogic数据源上的高级属性,即“包装数据类型”。如果它已启用,则关闭它,然后查看性能是否有所改善。@EmmanuelCollin我查看了10.3.6的修复错误列表,并在那里看到了此错误。我们可以说这个补丁包含在10.3.6中。我给甲骨文打开了一个SR,毫无疑问,他们一如既往地懒惰;他们所做的只是索取大量信息,却一无所获。顺便说一句,我今天和我们的操作人员谈过,他说他在禁用“包装数据类型”实用程序后忘记重新启动数据源,他说3天来GC工作正常,堆看起来稳定。我不太确定情况是否如此,但问题似乎已经解决了。下周我会通知您。您是否检查了代码是否正确关闭了结果集、语句和连接?还有一件事,别忘了此功能已被弃用,并将在下一版本的WebLogic中禁用。@EmmanuelCollin是的,我已检查了所有功能,但没有发现任何可疑之处。它们都关得很紧。我还从weblogic管理控制台监控了数据源,我发现没有连接泄漏。我听说它将失去支持,但由于这是一个遗留系统,我们可以在这个weblogic版本上保留至少5年……您确定这是内存泄漏,而不仅仅是从数据库加载的一个大结果集吗?您是否有任何堆指标来确认内存泄漏?请查看Weblogic数据源上的高级属性,即“包装数据类型”。如果它已启用,则关闭它,然后查看性能是否有所改善。@EmmanuelCollin我查看了10.3.6的修复错误列表,并在那里看到了此错误。我们可以说这个补丁包含在10.3.6中。我给甲骨文打开了一个SR,毫无疑问,他们一如既往地懒惰;他们所做的只是索取大量信息,却一无所获。顺便说一句,我今天和我们的操作人员谈过,他说他在禁用“包装数据类型”实用程序后忘记重新启动数据源,他说3天来GC工作正常,堆看起来稳定。我不太确定情况是否如此,但问题似乎已经解决了。下周我会让你知道的。