java產生core文件分析

在c語音和c++語言編寫的程序裏,core文件比較常見,但是java程序產生core文件還是比較少見的,最近在一個dubbo項目中發現了一個core文件,這樣的情況下一般是jvm自身的異常退出,因此我們可以使用gdb命令執行jvm路徑來定位問題

gdb $JAVA_HOME/bin/java  core.118746

然後輸入bt就可以看到進程退出時的線程棧

可以看到,是在連接tt數據庫時執行freestmt產生的問題

jstack  $JAVA_HOME/bin/java core.118746

查看線程執行棧,其中有一段確實是在freestmt這裏IN_NATIVE(正在執行本地方法)

Thread 119385: (state = IN_NATIVE)
 - com.timesten.jdbc.JdbcOdbcClient.freeStmt(long, int) @bci=0 (Compiled frame; information may be imprecise)
 - com.timesten.jdbc.JdbcOdbc.SQLFreeStmt(long, int) @bci=45, line=1103 (Compiled frame)
 - com.timesten.jdbc.JdbcOdbcConnection.dropOdbcStatement(long) @bci=62, line=2643 (Compiled frame)
 - com.timesten.jdbc.JdbcOdbcStatement.close(boolean, boolean) @bci=184, line=556 (Compiled frame)
 - com.timesten.jdbc.JdbcOdbcPreparedStatement.close(boolean, boolean) @bci=196, line=1771 (Compiled frame)
 - com.timesten.jdbc.JdbcOdbcPreparedStatement.close() @bci=3, line=1723 (Compiled frame)
 - org.apache.commons.dbcp.PoolingConnection.destroyObject(java.lang.Object, java.lang.Object) @bci=14, line=311 (Compiled frame)
 - org.apache.commons.pool.impl.GenericKeyedObjectPool.destroy(java.util.Map) @bci=80, line=1450 (Compiled frame)
 - org.apache.commons.pool.impl.GenericKeyedObjectPool.clear() @bci=168, line=1345 (Compiled frame)
 - org.apache.commons.pool.impl.GenericKeyedObjectPool.close() @bci=9, line=1725 (Compiled frame)
 - org.apache.commons.dbcp.PoolingConnection.close() @bci=19, line=84 (Compiled frame)
 - org.apache.commons.dbcp.DelegatingConnection.close() @bci=8, line=247 (Interpreted frame)
 - org.apache.commons.dbcp.PoolableConnection.reallyClose() @bci=1, line=122 (Interpreted frame)
 - org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(java.lang.Object) @bci=11, line=628 (Interpreted frame)
 - org.apache.commons.pool.impl.GenericObjectPool.returnObject(java.lang.Object) @bci=22, line=1346 (Compiled frame)
 - org.apache.commons.dbcp.PoolableConnection.close() @bci=79, line=90 (Compiled frame)
 - org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close() @bci=11, line=191 (Compiled frame)
 - com.tydic.abm.common.db.JdbcManager.release() @bci=92, line=1088 (Compiled frame)
 - com.tydic.abm.common.db.JdbcManager.rollback() @bci=182, line=1067 (Compiled frame)

我們還可以用jmap命令將core文件轉爲hprof文件,用MAT或VisualVM進行JVM堆內存分析

jmap -dump:format=b,file=dump.hprof $JAVA_HOME/bin/java core.118746

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章