当前位置:  开发笔记 > 编程语言 > 正文

JVM在长寿测试中在高负载下冻结

如何解决《JVM在长寿测试中在高负载下冻结》经验,为你挑选了1个好方法。

使用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)

OS:

CentOS release 6.4 (Final)

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)

2天后,我在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发布的.

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



1> Guy Sela..:

我发现了问题!
这是一个内核错误,futex_wait()它被反向移植到我们的内核版本.
你可以在这里阅读:https:
//groups.google.com/forum/#!topic/mechanical-sympathy/QbmpZxp6C64

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有