1、core环境配置
查看core文件是否开启,未开启则开启
limit -a
Core file size 为0代表关闭core文件,unlimited代表开启core文件。
vi /etc/security/limits.conf
添加
或者 vi /etc/profile
增加:ulimit -c unlimited
source /etc/profile
再执行ulimit -a
2、core文件的名称和路径配置
设置pid作为文件扩展名:
echo "1">/proc/sys/kernel/core_uses_pid
修改临时生效core文件路径
mkdir /corefile
chmod 777 /corefile
echo "/corefile/%e.core.%p">/proc/sys/kernel/core_pattern
sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t
永久生效core文件路径
echo "kernel.core_pattern=/corefile/%e.core.%p" >> /etc/sysctl.conf
3、验证core文件配置是否生效
执行ps -ef | grep dmserver,强行kill达梦进程,查看是否生成core文件
4、dmrdc工具
对于数据库产生的core文件,dm提供dmrdc工具进行core文件的分析读取,此工具可以提取出core文件中的完整sql语句。
例如:./dmrdc /corefile/core-dmserver-17554-1713423571
生成core_tmp文件,查看即可获得问题SQL
5、gdb工具
gdb是linux下一个强大的程序调试工具,调试达梦程序的core文件:gdb dmserver core
例如:
gdb dmserver /corefile/core-dmserver-4166-1669464222
bt命令来查看异常位置
info threads查看所有线程
前面有*为当前线程,LWP后面为线程号
set logging命令详解
退出gdb:quit
6、core分析思路
(1):服务器core
服务端主动 core 表示程序因某种资源不够或已知原因而发生的“自杀”行为,一般在达梦数据库运行日志或 core 堆栈中会出现 dm_sys_halt 的信息,这种情况下通过堆栈和日志信息便可以确定发生问题的原因。
(2):未知异常原因导致的 core
这一类是服务端程序被迫发生的,例如内存访问越界、非法指针、堆栈溢出等问题,主要表现为达梦数据库运行日志检查点突然中断,没有任何信息,但这一类问题的原因往往是由某个 sql 语句引发的,只需要找到对应的 sql 语句即可。
core存储路径(不同操作系统不一样,麒麟和中科方德的)
达梦技术社区:eco.dameng.com