ClickHouse物理機生成core文件配置
通常情況下,core文件會包含了程序運行時的內存,寄存器狀態,堆棧指針,內存管理信息還有各種函數調用堆棧信息等,我們可以理解為是程序工作當前狀態存儲生成第一個文件,許多的程序出錯的時候都會產生一個core文件,通過工具分析這個文件,我們可以定位到程序異常退出的時候對應的堆棧調用等信息,找出問題所在并進行及時解決。
先決條件
產生coredump的條件,首先需要確認當前會話的ulimit -c,若為0,則不會產生對應的coredump,需要進行修改和設置。ulimit -c unlimited (可以產生coredump且不受大小限制),這種設置僅對當前生效,如果想永久生效那么需要在/etc/profile中加入以下一行,
這將允許生成coredump文件:ulimit-c unlimited 。
更改core dump 路徑
sudo mkdir -p /media/diskpool/core
sudo chown -R clickhouse:clickhouse /media/diskpool/core/
sudo bash -c 'echo /media/diskpool/core/core.%e.%p > /proc/sys/kernel/core_pattern'
//指定內核所生成的coredump文件的文件名。例如,使用下面的命令使kernel生成名字為core.filename.pid格式的core dump文件:這樣配置后,產生的core文件中將帶有崩潰的程序名、以及它的進程ID。上面的%e和%p會被替換成程序文件名以及進程ID。
驗證是否生效
code
#include <iostream>
#include <stdio.h>
using namespace std;
void core_test1()
{
int i = 0;
scanf("%d", i);
printf("%d", i);
}
int main()
{
core_test1();
return 0;
}
編譯
g++ -g ctest.cpp -o ./ctest
運行
image.png
調試現場
image.png