1. 內核轉儲作用
(1) 內核轉儲的最大好處是能夠保存問題發(fā)生時的狀態(tài)。
(2) 只要有可執(zhí)行文件和內核轉儲,就可以知道進程當時的狀態(tài)。
(3) 只要獲取內核轉儲,那么即使沒有復現環(huán)境,也能調試。
centos 6 設置內核轉儲
統(tǒng)一命令為以下幾條命令,后面是解釋
echo "* soft core unlimited" >> /etc/security/limits.conf
echo "kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t"? >> /etc/sysctl.conf
echo "fs.suid_dumpable = 2"? >> /etc/sysctl.conf
echo "DAEMON_COREFILE_LIMIT=’unlimited’" >> /etc/sysconfig/init
sysctl -p
編輯/etc/security/limits.conf,注意這是為所有進程設置的,但如果你有一個作為服務帳戶運行的進程,請用服務帳戶替換*。您必須重新啟動此過程以使此更改生效。
編輯/etc/sysctl.conf并添加放置核心文件和任何命名標準的位置。
文件名變量:
%e是文件名
%g是進程運行的gid?
%p是進程的PID?
%s是導致轉儲的信號
%t是轉儲發(fā)生的時間
%u是進程運行的uid
編輯/etc / sysconfig / init并設置核心文件限制。
centos 7 設置內核轉儲
echo -e "\n# enable coredump whith unlimited file-size for all users\n* soft core unlimited" >> /etc/security/limits.conf
echo -e "\nkernel.core_pattern=/tmp/core-%e-%s-%u-%g-%p-%t" >> /etc/sysctl.conf
echo -e "1" > /proc/sys/kernel/core_uses_pid
sysctl -p /etc/sysctl.conf
2,測試是否生效
例子的源代碼:
#include
int main(void)
{
int *a = NULL;
*a = 0x1;
return 0;
}
把以上源代碼,寫成一個a.c文件后,編譯a.c文件產生一個a.out的可執(zhí)行文件:
#gcc -g a.c -o a.out
修改a.out文件的權限后,執(zhí)行它:
#./a.out
就會顯示:
Segmentation fault(core dump)
這表示在/tmp目錄下, 已經生成了a.out對應的內核轉儲文件。
注意:后面帶有(core dump), 才說明轉儲文件成功生成了。