1. 內(nèi)核轉(zhuǎn)儲(chǔ)作用
(1) 內(nèi)核轉(zhuǎn)儲(chǔ)的最大好處是能夠保存問題發(fā)生時(shí)的狀態(tài)。
(2) 只要有可執(zhí)行文件和內(nèi)核轉(zhuǎn)儲(chǔ),就可以知道進(jìn)程當(dāng)時(shí)的狀態(tài)。
(3) 只要獲取內(nèi)核轉(zhuǎn)儲(chǔ),那么即使沒有復(fù)現(xiàn)環(huán)境,也能調(diào)試。
centos 6 設(shè)置內(nèi)核轉(zhuǎn)儲(chǔ)
統(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,注意這是為所有進(jìn)程設(shè)置的,但如果你有一個(gè)作為服務(wù)帳戶運(yùn)行的進(jìn)程,請(qǐng)用服務(wù)帳戶替換*。您必須重新啟動(dòng)此過程以使此更改生效。
編輯/etc/sysctl.conf并添加放置核心文件和任何命名標(biāo)準(zhǔn)的位置。
文件名變量:
%e是文件名
%g是進(jìn)程運(yùn)行的gid?
%p是進(jìn)程的PID?
%s是導(dǎo)致轉(zhuǎn)儲(chǔ)的信號(hào)
%t是轉(zhuǎn)儲(chǔ)發(fā)生的時(shí)間
%u是進(jìn)程運(yùn)行的uid
編輯/etc / sysconfig / init并設(shè)置核心文件限制。
centos 7 設(shè)置內(nèi)核轉(zhuǎn)儲(chǔ)
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;
}
把以上源代碼,寫成一個(gè)a.c文件后,編譯a.c文件產(chǎn)生一個(gè)a.out的可執(zhí)行文件:
#gcc -g a.c -o a.out
修改a.out文件的權(quán)限后,執(zhí)行它:
#./a.out
就會(huì)顯示:
Segmentation fault(core dump)
這表示在/tmp目錄下, 已經(jīng)生成了a.out對(duì)應(yīng)的內(nèi)核轉(zhuǎn)儲(chǔ)文件。
注意:后面帶有(core dump), 才說明轉(zhuǎn)儲(chǔ)文件成功生成了。