Java 产生 core 文件分析

方法一

gdb $JAVA_HOME/bin/java  core.118746

然后输入 bt 就可以看到进程退出时的线程栈

image

方法二

jstack  $JAVA_HOME/bin/java core.118746

查看线程执行栈,



  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

  
    展开阅读全文