本文于 133 天前发布,最后更新于 126 天前
一、修改core文件生成路径
添加存放core文件的路径
mkdir -p /home/dmdba/dmcore
chown -R dmdba.dinstall /home/dmdba/dmcore
调整core文件路径,编辑文件/etc/sysctl.conf添加对应core文件参数
kernel.core_pattern =/home/dmdba/dmcore/core-%e-%p-%s
执行sysctl -p进行生效。
备注:
core文件中符号说明
%% – 符号%
%p – 进程号
%u – 进程用户id
%g – 进程用户组id
%s – 生成core文件时收到的信号
%t – 生成core文件的时间戳(seconds since 0:00h, 1 Jan 1970)
%h – 主机名
%e – 程序文件名
如果没有按照上述配置,core文件到达2GB会截断,值为/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h,则coredump的目录在/var/lib/systemd/coredump/下,并且是以压缩的方式进行存储,一般是lz4结尾的文件。
二、分析core文件
(1)把core文件cp到磁盘空间足够的路径下,解压
lz4 -d [core文件]
(2)提供gdb读取coredump的命令行
gdb dmserver [解压后的core文件]
一直Enter,查看 dmstack.log 所有的线程
(gdb) set logging off
或者直接bt查看崩溃线程
(3)如果是SQL导致的coredump,可以扫描下具体那条SQL
[dmdba@dameng bin]$ ./dmrdc sfile=[解压后的core文件] dfile=result.txt
分析完成后在result.txt文件中找到dmstack.log中的Thread 1中的LWP号,那条SQL就是导致宕机的SQL。
三、总结
- 打印堆栈[gdb dmserver core文件~bt]找到LWP号
- 分析core文件生成SQL日志[dmrdc sfile=core.xxx dfile=result.txt],在result.txt文件中找到LWP号的SQL。