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