【达梦数据库】使用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
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

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
4、不生成core文件解决方法:关闭abrt

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

[root@localhost ~]# systemctl status abrtd.service
[root@localhost ~]# systemctl stop abrtd.service
[root@localhost ~]# systemctl disable abrtd.service

三、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

image-20230830111939217

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

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

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
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;

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot可以通过使用达梦数据库的JDBC驱动程序来集成达梦数据库。下面是在Spring Boot项目中集成达梦数据库的步骤: 1. 在pom.xml文件中添加达梦数据库的JDBC驱动依赖: ```xml <dependency> <groupId>com.dm</groupId> <artifactId>dm-jdbc-driver</artifactId> <version>xxx</version> </dependency> ``` 请将`xxx`替换为您要使用达梦数据库驱动程序的版本。 2. 在application.properties(或application.yml)文件中配置达梦数据库的连接信息: ```properties spring.datasource.url=jdbc:dm://localhost:5236/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password ``` 请将`localhost:5236`替换为您的达梦数据库的主机和端口号,`your_database_name`替换为您要连接的数据库名称,`your_username`和`your_password`替换为您的数据库用户名和密码。 3. 创建一个JdbcTemplate bean来执行SQL查询和操作: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component public class MyDAO { private final JdbcTemplate jdbcTemplate; @Autowired public MyDAO(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } // 在这里定义您的数据访问方法 } ``` 现在,您可以在`MyDAO`类中定义您需要的数据访问方法使用`jdbcTemplate`执行SQL查询和操作。 这是一个简单的示例,演示了如何在Spring Boot项目中集成达梦数据库。您可以根据自己的需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值