当前位置:   article > 正文

【达梦数据库】使用core文件分析的故障定位方法_达梦core文件故障分析

达梦core文件故障分析


一、core文件作用

在Linux中,使用gdb对core文件进行调试是一种有效的定位程序崩溃的方法。当程序出错而异常中断时,OS会把程序工作的当前状态存储成一个core文件。

通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

二、生成core文件

1、查看core配置
cat /proc/sys/kernel/core_pattern
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h
  • 1
  • 2
2、修改参数
# 配置永久生效
[root@localhost ~]# vi /etc/security/limits.conf
dmdba soft core unlimited
dmdba hard core unlimited
# 查看是否生效
[root@localhost ~]# su - dmdba
[dmdba@localhost ~]$ ulimit -c
# 修改文件生成路径和命名格式,生成到BUG进程的所在目录
[root@localhost ~]# echo "./core-%e-%p-%s" > /proc/sys/kernel/core_pattern
[root@localhost ~]# cat /proc/sys/kernel/core_pattern
./core-%e-%p-%s
# 查看是否生效
[root@localhost ~]# sysctl kernel.core_pattern
kernel.core_pattern = ./core-%e-%p-%s
# 修改/etc/sysctl.conf 参数
[root@localhost ~]# vi /etc/sysctl.conf
kernel.core_pattern=./core-%e-%p-%s
kernel.core_uses_pid=1
# 使修改生效
[root@localhost ~]# sysctl -p

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
3、验证
# 通过强杀一个进程产生一个coredump文件
[dmdba@localhost ~]$ ps -ef|grep dms
dmdba      1618      1  0 16:46 ?        00:00:09 /home/dmdba/dmdbms/bin/dmserver path=/data/DAMENG/dm.ini -noconsole
dmdba      3585   3330  0 17:07 pts/0    00:00:00 grep --color=auto dms
[dmdba@localhost ~]$ kill -11 1618
[dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin/
# 会在dmserver的目录下生成一个core文件
[dmdba@localhost bin]$ ll core*
-rw------- 1 dmdba dinstall 2808848384 Aug 29 17:08 core-dmserver-1618-8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
4、不生成core文件解决方法:关闭abrt

文件的结果会被Linux的一个abrt进程吞掉了。abrtd 是一个守护进程监控的应用程序崩溃。

[root@localhost ~]# systemctl status abrtd.service
[root@localhost ~]# systemctl stop abrtd.service
[root@localhost ~]# systemctl disable abrtd.service
  • 1
  • 2
  • 3

三、core文件分析

1、gdb打开core文件
[dmdba@localhost bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ll core*
-rw------- 1 dmdba dinstall 2808848384 Aug 29 17:08 core-dmserver-1618-8
-rw------- 1 dmdba dinstall 2811404288 Aug 29 12:27 core-dmserver-9442-8
-rw------- 1 dmdba dinstall 2900819968 Aug 30 11:17 core-dm_sql_thd-1645-8
[dmdba@localhost bin]$ gdb dmserver core-dm_sql_thd-1645-8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

image-20230830111939217

可以看出中断由 dmserver 引起,并且和 0x0000000001b72677 对应的线程有关。

2、通过gdb命令info thr获取Thread 1对应线程号或系统/var/log/kernl日志获取导致core的线程号
(gdb) info thr
  • 1

image-20230830112611161

对应线程号LWP 4225

3、使用dmrdc工具分析core文件获取所有sql语句
[dmdba@localhost bin]$ ./dmrdc SFILE=./core-dm_sql_thd-1645-8 DFILE=./core-dm_sql_thd-1645-8-tmp
  • 1
4、查找出dmrdc解析文件中对应线程号的sql
[dmdba@localhost bin]$ more core-dm_sql_thd-1645-8-tmp
!#%&*^$@[4225]:select A.UDepartment,c.TroubleTimes,A.IsRunEq,
TO_CHAR(DATE_SUB(TO_DATE(TroubleTimes,'yyyymm' ),INTERVAL '1' MONTH), 'yyyymm') AS Lastmonth,
TO_CHAR(DATE_SUB(TO_DATE(TroubleTimes,'yyyymm' ),INTERVAL '1' YEAR), 'yyyymm') AS LastYear
from EMM_SNNumberhead a
left join (select equipmentID,
to_char(TroubleTime,'yyyymm') as TroubleTimes
from EPM_MAINTENANCEORDERHEADT)c
on a.oid=c.equipmentID;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台 (dameng.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/152593?site
推荐阅读
相关标签
  

闽ICP备14008679号