ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-19 15:00:17  阅读:300  来源: 互联网

标签:java jvm garbage-collection file-descriptor freeze


使用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发布的.

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

解决方法:

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

标签:java,jvm,garbage-collection,file-descriptor,freeze
来源: https://codeday.me/bug/20190519/1136116.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有