目錄html
能夠按照下面這個文章的指引來經過jni調用觸發Java core dumpjava
Generating a Java Core Dumplinux
基本思路是經過Java調用本地C代碼,而後在C代碼中觸發一個錯誤,從而引起jvmshell
crash。jvm
須要注意兩個問題.net
libnativelib.so
,須要改成libnativelib.jnilib
$ gcc -fPIC -o libnativelib.jnilib -shared \ -I$JAVA_HOME/include/linux/ \ -I$JAVA_HOME/include/ \ CoreDumper.c
sudo cp $JAVA_HOME/Contents/Home/include/darwin/jni_md.h $JAVA_HOME/Contents/Home/include
在執行java mainClass的時候可能會報這個錯誤,由於java執行mainClass的時候mainClass須要帶有package名稱,要看下生成的libnativelib.jnilib在那一個目錄,使用-Djava.library.path指向libnativelib.jnilib的路徑日誌
通過上面一頓操做以後,就能夠看到執行java目錄下面有一個hs_err_pidxxx.log文件,在對應的目錄下還有core dump文件,mac下的core dump目錄是code
/cores
不過有可能並無生成core dump,只有hs_err_pidxxx.log文件,咱們看下hs_err_pidxxx.log文件,其中有一行htm
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
根據提示core dump失敗了,能夠經過設置ulimit -c unlimited
再從新試下,就能夠在/cores目錄下找到相似core.xxx的文件。blog
由於mac下會限制進程對資源的限制,-c表示core文件的最大值,單位爲區塊,ulimit -c unlimited
設置爲無限制。注意在當前shell中執行只會對當前shell生效。
hs_err_pidxxx.log是一個文本日誌文件,能夠直接查看。core dump文件能夠經過gdb、jmap、jstack來分析,具體能夠參考Analysing a Java Core Dump
參考
JVM Crashes的常見緣由:Staying on Top of JVM Crashes
gcc編譯找不到jni_md.h:Mac下Java JNI 調C