Linux系统开启coredump的几种方式

阅读: 评论:0

Linux系统开启coredump的几种方式

Linux系统开启coredump的几种方式

一、修改程序生成core dump的几种方法

  1. 临时修改进程prlimit --core=unlimited -p $PID

  2. ulimit -c unlimited

  3. 编辑 /etc/f 文件,设置 tidb 用户 core file size soft 和 hard limit 为 unlimited。

 $ sudo vi /etc/f
tidb        soft        core          unlimited
tidb        hard        core          unlimited

如果希望对所有用户生效,tidb 替换为 * 即可。

$ sudo vi /etc/f
*        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

  1. 在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
  1. 进行全局设置
    如果希望对系统 systemd service 全局设置,可修改 /etc/f 文件。
sudo vi /etc/f[Manager]
DefaultLimitCORE=infinity

不过该操作生效重启系统。测试中发现执行以下命令也可以让 systemd 加载最新配置,不过官方文档说明该命令很少用,主要在 debugging 和 package upgrades 时使用。

sudo systemctl daemon-reexec

2.2 生成core文件的位置和名称

  1. 默认生成core dump文件名为core,并且会被新的core文件覆盖
    修改此系统配置生成core.PID的形式:
echo 1 > /proc/sys/kernel/core_uses_pid
sysctl -_uses_pid=1
  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 byexclamation 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 -_pattern=/root/core/core-%e-%s

参考

  1. core(5) — Linux manual page
  2. systemd service 如何开启 core dump
  3. Linux生成core文件、core文件路径设置

本文发布于:2024-02-04 20:35:06,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170715885959381.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:几种   方式   系统   Linux   coredump
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23