Linux系统开启coredump的几种方式
一、修改程序生成core dump的几种方法临时修改进程prlimit --core=unlimited -p $PIDulimit -c unlimited编辑 /etc/security/limits.conf 文件,设置 tidb 用户 core file size soft 和 hard limit 为 unlimited。$ sudo vi /etc/security/limits.co
·
一、修改程序生成core dump的几种方法
-
临时修改进程
prlimit --core=unlimited -p $PID
-
ulimit -c unlimited
-
编辑 /etc/security/limits.conf 文件,设置 tidb 用户 core file size soft 和 hard limit 为 unlimited。
$ sudo vi /etc/security/limits.conf
tidb soft core unlimited
tidb hard core unlimited
如果希望对所有用户生效,tidb 替换为 * 即可。
$ sudo vi /etc/security/limits.conf
* soft core unlimited
* hard core unlimited
退出当前用户登录,再重新登录,你会发现,core dump 已经开启。
$ exit
~ ssh tidb@172.16.10.72
$ ulimit -c
unlimited
$ cat /proc/11352/limits
Limit Soft Limit Hard Limit Units
Max core file size unlimited unlimited bytes
二、systemd服务开启core dump
2.1 如何产生core dump
- 在keepalived.service文件中加入
LimitCORE=infinity
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
[Service]
Type=forking
LimitCORE=infinity
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/koal/keepalived/etc/sysconfig/keepalived
ExecStart=/koal/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
然后重启systemd和keepalived服务
sudo systemctl daemon-reload
sudo systemctl restart tikv-20160.service
- 进行全局设置
如果希望对系统 systemd service 全局设置,可修改 /etc/systemd/system.conf 文件。
sudo vi /etc/systemd/system.conf
[Manager]
DefaultLimitCORE=infinity
不过该操作生效重启系统。测试中发现执行以下命令也可以让 systemd 加载最新配置,不过官方文档说明该命令很少用,主要在 debugging 和 package upgrades 时使用。
sudo systemctl daemon-reexec
2.2 生成core文件的位置和名称
- 默认生成core dump文件名为
core
,并且会被新的core文件覆盖
修改此系统配置生成core.PID
的形式:
echo 1 > /proc/sys/kernel/core_uses_pid
sysctl -w kernel.core_uses_pid=1
- 修改
/proc/sys/kernel/core_pattern
定义的core文件名称和路径
%% - A single % character.
%c - Core file size soft resource limit of crashing process
(since Linux 2.6.24).
%e - insert coredumping executable name into filename 添加导致产生core的命令名
%E - Pathname of executable, with slashes ('/') replaced by
exclamation marks ('!') (since Linux 3.0).
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%p - insert pid into filename 添加pid(进程id)
%u - insert current uid into filename 添加当前uid(用户id)
%g - insert current gid into filename 添加当前gid(用户组id)
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
当以|
字符开头时,允许将core文件通过管道报告给脚本,ubuntu默认的core_pattern
形式就是报告给report
程序:
cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E
可以做出以下修改:
sysctl -w kernel.core_pattern=/root/core/core-%e-%s
参考
更多推荐
已为社区贡献1条内容
所有评论(0)