我被赋予了一个有趣的任务,即确定在第三方"黑盒子"中停止世界垃圾收集/内存泄漏。宁静的应用,正在生产中。
应用程序是负载平衡的,最近,应用程序在所有服务器实例上都有一个停止世界的垃圾收集,这导致生产服务中断。
我(我们)无法访问第三方代码。
这是我到目前为止所做的:
我已经查看了How to find a Java Memory Leak
我处于劣势,无法查看源代码。
有人可以给我任何进一步的提示或策略,了解如何追踪导致世界各地的GC和内存泄漏的原因。
以下是正在使用的JVM参数:
java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=true
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Xms6g -Xmx6g -XX:MetaspaceSize=2g -XX:MaxMetaspaceSize=2g
-server -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-Dsun.net.client.defaultConnectTimeout=10000
-Dsun.net.client.defaultReadTimeout=30000
-XX:+DisableExplicitGC -d64 -verbose:gc -Xloggc:/var/log/gc.log
-XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/heapdump.hprof
-XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled
-XX:+ParallelRefProcEnabled
-XX:+UseLargePagesInMetaspace -XX:MaxGCPauseMillis=100
谢谢
数。