Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 寿命测试中高负载下的JVM冻结_Java_Garbage Collection_Jvm_Freeze_File Descriptor - Fatal编程技术网

Java 寿命测试中高负载下的JVM冻结

Java 寿命测试中高负载下的JVM冻结,java,garbage-collection,jvm,freeze,file-descriptor,Java,Garbage Collection,Jvm,Freeze,File Descriptor,使用JVM运行: java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode) 操作系统: Jvm选项: -Xmx4g -Xms4g -XX:MaxPermSize=4g -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistog

使用JVM运行:

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
操作系统:

Jvm选项:

-Xmx4g -Xms4g -XX:MaxPermSize=4g -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintClassHistogram -XX:+CMSClassUnloadingEnabled -verbose:gc -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC
在OSGI环境中运行,Aerospike DB,NETTY(NIO)用于联网

进行了一次周末寿命测试。 这是最后一次印刷:

[2015-12-11 09:54:51,185] INFO  : [GC pause (young)
两天后,我在pid上运行了strace,然后是下一个打印:

[2015-12-11 09:54:51,185] INFO  : [GC pause (young) 3598M->1458M(4096M), 0.0280020 secs]
[2015-12-13 11:54:54,353] INFO  : [GC pause (young) 3598M->1464M(4096M), 180001.5628870 secs]
第一次打印完成,下一次打印显示2天GC

jvm在冻结期间没有响应线程转储信号(pkill-QUIT-pid)。 这种冰冻每隔几天就发生一次。 冻结不仅发生在G1收集器上,也发生在CMS收集器上。 我如何开始调试,以及什么可能导致这种情况

多谢各位

编辑: 又一次冻结,这次strace没有释放冻结。 第二次冻结是使用jstack释放的

更新: 发现问题了!请看下面的答案

我发现了问题
这是
futex\u wait()
中的一个内核错误,它被后移植到我们的内核版本中。
您可以在这里阅读:

什么操作系统?你试过jstack-m-F吗?你试过Java8吗?我添加了操作系统类型。还没有尝试Java 8、jstack或perf。这次运行jstack释放了JVM冻结,我将调查转储中是否有异常。这可能与文件描述符有关吗?我看到很多线程在日志记录操作上被阻塞。看起来您有资源泄漏,并且您的程序的文件句柄不足,这会阻止其他任何程序运行,因为它试图在保存其他线程所需的锁的同时进行日志记录。您应该修复资源泄漏或增加最大文件数,并希望这会使问题更为罕见。
[2015-12-11 09:54:51,185] INFO  : [GC pause (young) 3598M->1458M(4096M), 0.0280020 secs]
[2015-12-13 11:54:54,353] INFO  : [GC pause (young) 3598M->1464M(4096M), 180001.5628870 secs]