筆記:Ubuntu產生Core dump

1. 產生執行中程序的Core Dump

gcore -o {output dump file} {process id} 

輸出的檔案名稱-o指定的檔名,加上process id作為副檔名

例如:
$ gcore -o chrome_dump 8283
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
warning: Target and debugger are in different PID namespaces; thread lists and other data are likely unreliable
pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
225 ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: No such file or directory.
Saved corefile chrome_dump.8283

2. 強制停止程序讓系統產生Core dump

kill -6 {process ID}
-6是SIGABRT信號,可讓process中止,如果沒效,可嘗試SIGSYS(-31)或是SIGXCPU(-24)信號

參考資料:
https://www.ibm.com/support/knowledgecenter/en/SSYKE2_9.0.0/com.ibm.java.multiplatform.90.doc/diag/tools/obtaining_dump_hung_jvm.html

如果沒有在工作目錄下產生core或coredump,表示需要暫時解除限制

暫時不限制
ulimit -c unlimited

查看目前的限制狀態,若為0表示不dump,Ubuntu就是預設為0
ulimit -c


其他ulimit選項

3. gdb查看執行檔的core dump

gdb {program file} {core file}
program file是你的執行檔位置
core file是core dump產生出來的檔案位置

參考資料:http://www.network-theory.co.uk/docs/gccintro/gccintro_38.html

4. 產生執行中的Java程式dump資訊
jstack -m {process ID}

5. jstack查看Java的core dump

jstack {jvm java} {core file}
第一個參數是執行該java程式時用的jvm, 例如${JAVA_HOME}/bin/java
第二個參數是是core dump產生出來的檔案

參考資料:
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/bugreports004.html#CHDHDCJD
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html#BABFDFDH

6. Android APP產生Trace資訊
kill -3 {process ID}
Dalvikvm會接受SIGQUIT產生所有process的stack trace資訊,原本這是為了查ANR所做的。
儲存Trace的路徑預設是使用系統property的dalvik.vm.stack-trace-file,例如/data/anr/traces.txt
一般會搭配ps -t來察看到底是哪些thread的狀態是有問題的

參考資料:
http://rayleeya.iteye.com/blog/1955657

留言