经过4 到 24 小时4 到 8 天的压力测试(30 个线程在600 万页浏览量/天)。这是在 RHEL 5.2 (Tikanga) 上。
崩溃报告位于http://pastebin.com/f639a6cf1,崩溃的一致部分是:
- 一个 SIGSEGV 被抛出
- 在 libjvm.so 上
- 伊甸园空间总是满的 (100%)
JVM 使用以下选项运行:
CATALINA_OPTS="-server -Xms512m -Xmx1024m -Djava.awt.headless=true"
我还使用http://memtest.org/测试了内存的硬件问题48 小时(整个内存的 14 次通过),没有任何错误。
我已经启用-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
了检查任何 GC 趋势或空间耗尽但那里没有任何可疑之处。GC 和完全 GC 以可预测的时间间隔发生,几乎总是释放相同数量的内存容量。
我的应用程序不直接使用任何本机代码。
关于我接下来应该看哪里的任何想法?
编辑 - 更多信息:
1)这个JDK中没有客户端vm:
[foo@localhost ~]$ java -version -server
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
[foo@localhost ~]$ java -version -client
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)
2) 无法更改操作系统。
3) 我不想更改 JMeter 压力测试变量,因为这可能会隐藏问题。由于我有一个使 JVM 崩溃的用例(当前的压力测试场景),我想修复崩溃而不更改测试。
4)我已经对我的应用程序进行了静态分析,但没有出现任何严重问题。
5)内存不会随时间增长。内存使用量以非常稳定的趋势非常迅速地平衡(启动后),这似乎并不可疑。
6) /var/log/messages 在崩溃之前或期间不包含任何有用的信息
更多信息:忘了提到有一个使用 mod_jk 1.2.28 的 apache (2.2.14) 前端 tomcat。现在我在没有 apache 的情况下运行测试,以防 JVM 崩溃与连接到 JVM(tomcat 连接器)的 mod_jk 本机代码有关。
之后(如果 JVM 再次崩溃)我将尝试从我的应用程序中删除一些组件(缓存、lucene、quartz),稍后将尝试使用码头。由于崩溃目前在 4 小时到 8 天之间的任何时间发生,因此可能需要很长时间才能查明发生了什么。