1.系統環境:
centos 7.2
2. 開啓應用程序coredump:
- 第一種方法,直接改配置文件,重啓系統後仍然生效
#vim /etc/security/limits.conf
* soft core unlimited
- 第二種方法,把修改core file限制的命令加到啓動配置文件裏
#echo "ulimit -c unlimited" > /etc/profile
- 第三種方法,使用資源限制命令,修改core 文件大小爲unlimited,它其實改的是shell的進程的資源限制,需要重啓目標進程,而且重啓後失效
#ulimit -c unlimited
3. 修改coredump文件的保存路徑
需要提前創建corefiles目錄,否則找不到這個目錄,就無法生成coredump文件
#mkdir /tmp/corefiles
只是在內存生效,重啓系統失效
#echo "/tmp/corefiles/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern
找到kernel.core_uses_pid所在配置文件, 在其中加入這一行,”kernel.core_pattern = /tmp/corefiles/core.%e.%p.%t “ ,可以永久生效
#sysctl --system
core_pattern內核參數,是用來指定一個core dump文件的名字模板,名字的最大長度128字節,默認名字是core,可以加入以下%開頭的模式字串:
%% 用來輸出一個 '%'符號
%p 正在生成core dump的進程pid
%P global pid (init PID namespace)
%i 在多線程環境中,發生異常的線程tid
%I global tid (init PID namespace)
%u 正在生成core dump的進程uid
%g 正在生成core dump的進程gid
%s 觸發進程生成core dump的信號量
%t core dump發生時,把當時的時間作爲文件名的一部分
%h core dump發生時,把所在主機的主機名作爲文件名的一部分
%e 可執行文件的文件名
%E 文件路徑
另外,可以使用管道模式,如kernel.core_pattern ="|/xx/xx/xx",把core dump數據輸出到另一個程序
重啓系統後,可以檢查是否生效
#sysctl kernel.core_pattern
4.通過強殺一個進程產生一個coredump文件
#kill -s SIGSEGV pid