ClickHouse物理機(jī)生成core文件配置
通常情況下宫仗,core文件會(huì)包含了程序運(yùn)行時(shí)的內(nèi)存的妖,寄存器狀態(tài)兑燥,堆棧指針鱼炒,內(nèi)存管理信息還有各種函數(shù)調(diào)用堆棧信息等泥彤,我們可以理解為是程序工作當(dāng)前狀態(tài)存儲(chǔ)生成第一個(gè)文件欲芹,許多的程序出錯(cuò)的時(shí)候都會(huì)產(chǎn)生一個(gè)core文件,通過(guò)工具分析這個(gè)文件吟吝,我們可以定位到程序異常退出的時(shí)候?qū)?yīng)的堆棧調(diào)用等信息菱父,找出問(wèn)題所在并進(jìn)行及時(shí)解決。
先決條件
產(chǎn)生coredump的條件剑逃,首先需要確認(rèn)當(dāng)前會(huì)話(huà)的ulimit -c浙宜,若為0,則不會(huì)產(chǎn)生對(duì)應(yīng)的coredump蛹磺,需要進(jìn)行修改和設(shè)置粟瞬。ulimit -c unlimited (可以產(chǎn)生coredump且不受大小限制),這種設(shè)置僅對(duì)當(dāng)前生效萤捆,如果想永久生效那么需要在/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'
//指定內(nèi)核所生成的coredump文件的文件名鳖轰。例如清酥,使用下面的命令使kernel生成名字為core.filename.pid格式的core dump文件:這樣配置后,產(chǎn)生的core文件中將帶有崩潰的程序名蕴侣、以及它的進(jìn)程ID焰轻。上面的%e和%p會(huì)被替換成程序文件名以及進(jìn)程ID。
驗(yàn)證是否生效
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