应用在发布的过程中突然crash了几台
解决过程:
1、应用crash后hs_err*.log以及core.[pid]文件都没生成;
2、先打开core dump;
3、crash后gdb core dump看:
1 2 3 4 | (gdb) bt #0 0x00002ba466f82971 in ?? () from /opt/jdk-1.6.0_26/jre/lib/amd64/server/libjvm.so #1 0x00002aab78a7e20d in Java_java_net_SocketOutputStream_socketWrite0 () from /opt/jdk-1.6.0_26/jre/lib/amd64/libnet.so |
4、看到上面的core dump完全木有头绪,后来@rednaxelafx 介入处理,才知道原来jstack是可以跟core dump文件提取出当时java程序的状况的;
5、jstack出来一看,发现程序里有个地方无限递归…so…
总结:
接着又进一步分析了为什么没有生成hs_err*.log,是因为从jdk 5.0以后的版本,hs_err*.log就是在crash的那个线程来生成,而这个案例中crash时的那个线程无限递归,而且正在native栈上,栈空间被消耗光了,所以hs_err*.log文件就没生成出来。
本文固定链接: http://www.chepoo.com/application-release-crash.html | IT技术精华网