注册
dm-core学习
培训园地/ 文章详情 /

dm-core学习

BinGoSTop 2025/06/26 175 0 0

1 gdb调试core文件并输出堆栈信息

1.1 执行三种不同的调试方法:服务启动前、服务运行中、服务已退出,有多种方式的尽量都列出

1.1.1 服务启动前

使用gdb启动dmserver,并使用run(r)命令指定运行dm.ini,启动数据库
image.png
image.png
image.png

1.1.2 执行问题SQL

1.1.3 输入bt,查看相应堆栈信息

1.1.4 输入info threads,查看线程信息

1.2 服务运行中

1.2.1 查询到已运行的dmserver进程,拿到对应PID号

ps -ef|grep dmserver
image.png

1.2.2 使用gdb 命令进入gdb页面,再执行attach PID

image.png
image.png

1.2.3 输入c,继续运行

image.png

1.2.4 执行问题SQL

1.2.5 可以看到执行到mem2_unprotect()函数时中断执行,LWP为4503

1.2.6 输入bt,输出堆栈信息

1.3 服务已退出

1.3.1 执行问题SQL,数据库直接core掉

1.3.2 启用gdb程序对core文件进行分析

gdb /dmdata/data/DAMENG/dmservice /dmdata/core/core-xxxx

1.3.3 输入bt,查看相应的堆栈信息

1.3.4 输入info threads,查看线程信息

2 如何将gdb调试中的结果输出到文件

将调试结果输出到文件中需要执行以下步骤:

2.1 指定日志文件(可加路径,文件自动生成)

set logging file /home/dmdba/stack.log

2.2 启用日志模式

set logging on

2.3 ----调试过程----

thread apply all bt

2.4 关闭日志模式

set logging off

3 列出gdb调试中常规的几个命令

3.1 gdb读取core文件

[root@localhost bin]# gdb ./dmserver core文件名

3.2 定义存储堆栈的文件名

(gdb) set logging file corexxx.txt

3.3 开始向文件中写入

(gdb) set logging on

3.4 记录当前所有崩溃线程堆栈

(gdb) thread apply all bt

3.5 关闭向文件中写入

(gdb) set logging off

3.6 记录当前崩溃线程堆栈:

(gdb) bt

3.7 记录当前崩溃线程号:

(gdb) info threads
前面有*为当前线程,LWP后面为线程号.

4 通过dmrdc抓取SQL语句

4.1 使用dmrdc工具生成SQL语句,并生成到指定文件中

[dmdba@ora11g ~]$ dmrdc sfile=/dmdata/core/core-disql-1890-11 dfile=/dmdata/core/core_250603.txt

4.2 查看结果

5 通过symbols调试core并输出堆栈信息

5.1 解压symbols包到数据库bin目录symbols下

5.2 利用symbols中dmserver_s.debug进行调试

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服