Clickhouse基于breakpad生成minidump文件,方便问题定位

背景

breakpad能够在程序崩溃的时候自动生成一个mini的core文件,能够帮助进行问题定位,但是clickhouse对于集成breappad的难度较大

查看github发现之前有大佬基于以前的分支有个MR,但是一直没有合并到社区,想来是有什么其他的原因,同时由于现在master的代码有些许差异,所以还需要进行部分改造

前提准备

社区大佬的MR:

https://github.com/ClickHouse/ClickHouse/pull/53916/files

clickhouse:最新提交如下图所示

https://github.com/ClickHouse/ClickHouse.git

编译环境

clang19

楼主编译时,主干已经更新到clang19,所以需要升级

bash 复制代码
# 安装依赖
apt update
apt install -y wget gnupg software-properties-common lsb-release
# 添加 LLVM 官方仓库(自动检测系统版本)
wget -qO- https://apt.llvm.org/llvm.sh | sudo bash -s 19
apt update
apt install -y clang-19 lldb-19 lld-19 clangd-19
# 修改默认配置
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 100
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 100

wsl

楼主基于wsl进行编译,其他操作系统类似

修改代码

修改文件清单如下图所示,详见附件

其他版本也可以对照进行修改,修改点参考社区MR https://github.com/ClickHouse/ClickHouse/pull/53916/files

核心代码

下述代码会在进程崩溃时优先生成minidump,成功之后还会生成core文件,即便没有开启ulimit -c

生成的文件默认在ck的日志目录下

编译

在前面将代码修改适配完成之后,即可进行编译,此处编译按照官方的指导逐步操作即可

bash 复制代码
mkdir build
cd build
export CC=clang-19
export CXX=clang++-19
cmake -D CMAKE_BUILD_TYPE=Debug ..
ninja -j 8

启动clickhouse

此处启动可以参考 CSDN

bash 复制代码
./clickhouse server config.xml

构造异常

可以修改代码,构造一个段错误,也可以直接向进程发送一个信号量的方式进行异常构造,验证core文件的生成,为了方便,此处采用直接发送信号量的方式

bash 复制代码
 kill -SIGSEGV PID

此时在进程崩溃之后便会自动生成minidump和core文件了

查看minidump文件

生成的minidump和core文件均在日志目录下

minidump转core

因为有的时候core文件很大,可能因为磁盘空间不足,无法生成,那么此时就需要用breakpad的转换工具了,此处可以参考其他文章

将转换之后的core文件用gdb加载,即可查看程序崩溃时的堆栈信息了,帮助进行问题定位。

相关推荐
xhtdj7 天前
智源大会圆桌大模型没有终局具身智能可能是中国的 AlphaGo 时刻
人工智能·clickhouse·安全·动态规划
xhtdj9 天前
技术采用曲线回望二十年
运维·数据库·人工智能·clickhouse·动态规划
Taerge011010 天前
Doris, StarRocks, ClickHouse, Hologres, ES 对比,选型建议
大数据·clickhouse·elasticsearch
海南java第二人12 天前
ClickHouse 表引擎完全指南:从 MergeTree 到集成引擎的选型实践
clickhouse
lhyzws13 天前
CENTOS上的网络安全工具(三十七)SPARK on CLICKHOUSE
clickhouse
海南java第二人13 天前
用户行为漏斗分析是什么?ClickHouse 如何轻松实现?
clickhouse
时空无限15 天前
clickhouse 数据损坏无法启动问题修复
clickhouse
阿演16 天前
我把这个桌面数据库工具又升级了一轮:现在支持 ClickHouse,还能可视化建表和改表了
数据库·clickhouse·ai编程·数据库连接工具
海南java第二人17 天前
ClickHouse 稀疏索引深度解析:为什么 OLAP 数据库不用 B-Tree?
数据库·clickhouse
海南java第二人17 天前
ClickHouse 主键索引详解:不是唯一标识,而是排序规则
clickhouse