packcore

在生产环境中,偶尔会因为程序Bug等其他未知原因而导致程序出core。程序出core不仅仅会导致查询执行失败,更严重的可能会出现集群故障,所以生成的core文件是非常重要的现场信息,需要提供给开发人员跟踪追查。

packcore工具用来为生成的core文件进行打包,以便开发人员调试跟踪。

1. 使用方法

packcore是随MatrixDB一同发布的Python工具, packcore工具的位置在:

$GPHOME/sbin/packcore

$GPHOME/sbin并不在环境变量中,所以需要通过绝对路径使用。

使用方法:

$GPHOME/sbin/packcore -b $GPHOME/bin/postgres postgres.core.4_1635732782.17213

其中:

  • -b $GPHOME/bin/postgres指定可执行文件路径,因为工作进程都派生自postgres master进程
  • postgres.core.4_1635732782.17213是生成的core文件

执行命令后,会在当前目录生成和core文件名相同的.tgz文件,将该文件提供给开发人员即可。里面包括了core文件和现场环境信息

2. 生成core文件

使用packcore工具进行core文件打包的前提是需要操作系统生成core文件。

生成core文件需要修改如下配置:

2.1 设置coredump文件大小

设置coredump文件大小无限制:

ulimit -c unlimited
# 持久化方式
echo "ulimit -c unlimited" >> /etc/profile

2.2 配置coredump文件路径

vi /etc/sysctl.conf

然后增加kernel.core_pattern=/home/mxadmin/%e.core.%s_%t配置到末尾

执行sysctl -p使配置生效:

sysctl -p

该配置决定了core文件生成的位置和文件名模板,其中:

  • %e:可执行文件名
  • %s:信号编号
  • %t:UNIX时间戳