在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.timest