当前位置: 首页 > news >正文

linux下如何检查与设置程序与服务崩溃时生成coredump文件--包括systemctl启动的服务

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

对于linux下的coredump生成,系统是做了限制的,有soft limit与hard limit,并不是崩溃了就会生成coredump信息。
另外即使限制放开了,也要注意coredump的生成路径,生成路径对于进程来说有没有写入的权限这块。

1. 检查运行程序或服务的 core file 配置(Soft Limit/Hard Limit)

要判断服务崩溃时能否生成 coredump,核心是查看进程的 core file size 限制,可通过 /proc/${pid}/limits 文件直接查询(${pid} 替换为服务进程 ID)。

1.1 操作示例:查询 1 号进程(systemd 主进程)的限制
# 先通过 ps 命令找到目标服务的 PID(以查询 systemd 主进程为例)
[xxx@~/test]$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 16:07 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 16:07 ?        00:00:00 [kthreadd]
...# 查看该进程的 core file 限制
[xxx@~/test]$ cat /proc/1/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     # 关键行:软限制为 0(禁止生成),硬限制无上限
Max resident set          unlimited            unlimited            bytes     
Max processes             6734                 6734                 processes 
Max open files            1048576              1048576              files     
...
1.2 结果解读
  • Soft Limit(软限制):进程实际遵循的限制,若为 0,表示当前禁止生成 coredump;
  • Hard Limit(硬限制):软限制可提升的最大值,若为 unlimited,说明允许将软限制调整为无上限。

2. 修改程序或服务的 core file limit 设置

根据程序类型(systemctl 服务 / 普通终端程序),需采用不同的配置方式,核心是将 core file size 的软限制调整为 unlimited

2.1 普通终端程序:单次设置或系统全局设置

若需为终端直接运行的程序(非 systemctl 服务)配置 coredump,可通过以下两种方式:

方式 1:单次设置(当前终端有效)

执行 ulimit -c unlimited,允许当前终端中运行的程序生成无大小限制的 coredump:

# 允许当前终端生成无限制大小的 coredump
ulimit -c unlimited
# 若需限制大小(如 1024KB),可执行:ulimit -c 1024

注意:此设置仅对当前终端生效,关闭终端后失效。

方式 2:系统全局设置(所有用户终端生效)

通过修改 /etc/security/limits.conf,让所有用户登录终端后默认开启 coredump:

# 编辑配置文件
sudo vim /etc/security/limits.conf# 在文件末尾添加以下两行(* 表示所有用户)
* soft core unlimited  # 软限制:无上限
* hard core unlimited  # 硬限制:无上限

生效方式:重启系统,或退出当前用户重新登录(无需重启服务,仅对新终端会话生效)。

2.2 systemctl 服务:直接修改服务配置文件(推荐)

systemd 服务默认不继承 /etc/security/limits.conf 的系统配置,必须在服务专属配置文件中显式设置限制,步骤如下:

步骤 1:找到服务配置文件路径

systemd 服务配置文件通常位于两个路径,可通过 systemctl cat [服务名] 快速定位:

  • 系统默认服务(如 Nginx、MySQL):/usr/lib/systemd/system/[服务名].service
  • 自定义服务:/etc/systemd/system/[服务名].service

示例(查找 TestService 的配置文件):

[xxx@~/test]$ systemctl cat TestService
# 输出结果会显示文件路径,如:
# # /usr/lib/systemd/system/TestService.service
[Unit]
Description=Test Service
...
步骤 2:编辑服务配置文件

[Service] 段落中添加 LimitCORE=infinity(表示将 core file 限制设为无上限):

sudo vim /usr/lib/systemd/system/TestService.service

添加内容后如下:

[Unit]
Description=Test Service
After=network.target[Service]
Type=simple
ExecStart=/opt/TestService/TestService  # 服务启动命令
LimitCORE=infinity  # 关键配置:允许生成无大小限制的 coredump
User=testuser       # 服务运行用户(需确保对 coredump 路径有写入权限)[Install]
WantedBy=multi-user.target
步骤 3:重载配置并重启服务
# 重载 systemd 配置(使修改生效)
sudo systemctl daemon-reload
# 重启服务(应用新的限制配置)
sudo systemctl restart TestService
步骤 4:验证修改是否生效

再次查询服务进程的 limits 文件,确认 Max core file size 的软限制已变为 unlimited

# 1. 找到重启后服务的 PID
ps -ef | grep TestService
# 2. 查看 core file 限制
cat /proc/${服务PID}/limits | grep "Max core file size"
# 预期输出:Max core file size        unlimited            unlimited            bytes

3. 修改程序或服务的存储位置设置信息

指定 coredump 存储路径和命名规则(避免默认路径混乱):编辑 /etc/sysctl.conf 配置文件,设置 coredump 的生成路径和文件名格式:

## 创建存储目录并授权:确保进程有写入权限
sudo mkdir -p /var/core
sudo chmod 777 /var/core  ## 添加以下内容(路径可自定义,如 /var/core/):
sudo vim /etc/sysctl.conf
# 变量说明:
# %e:程序文件名
# %p:进程 ID
# %t:崩溃时间戳(秒级)
# 格式:[路径]/core.[程序名].[进程ID].[时间戳]
kernel.core_pattern = /var/core/core.%e.%p.%t
# 允许非root用户写入coredump路径(若路径权限限制)
kernel.core_uses_pid = 1## 使 sysctl 配置生效:
sudo sysctl -p

4. 验证服务 coredump 生成是否生效

配置完成后,可通过「强制服务崩溃」的方式验证 coredump 是否正常生成:

步骤 1:触发服务崩溃

发送 SIGABRT 信号(信号值 6)给服务进程,强制其崩溃并生成 coredump:

# 1. 找到服务 PID
ps -ef | grep TestService
# 假设输出:testuser  12345     1  0 10:00 ?        00:00:05 /opt/TestService/TestService# 2. 发送 SIGABRT 信号
sudo kill -6 12345
步骤 2:检查 coredump 文件

查看 /var/core 目录,若存在 core.程序名.进程ID.时间戳 格式的文件,说明配置生效:

ls -l /var/core
# 预期输出:
# -rw------- 1 testuser testuser 10485760 Jun 10 10:05 core.TestService.12345.1718000000

5. 总结:

生成 coredump 的核心流程可概括为:

  • 开启开关:通过 ulimit命令 或 /etc/security/limits.conf,或者service服务中配置LimitCORE=infinity,允许生成 coredump。
  • 配置路径:通过/etc/sysctl.conf中core_pattern自定义存储位置和命名。
  • 触发生成:等待程序崩溃、手动发送信号,或配置服务自动生成。

掌握 coredump 生成方法,是定位linux下C/C++等编译型程序底层问题的必要技能。

注:豆包AI参与了文章润色和补充。

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

http://www.dtcms.com/a/404628.html

相关文章:

  • 门户网站的建立一家只做t恤的网站
  • 如何购买网站主机淄博什么兼职的网站建设
  • 乐陵网站建设wordpress配置首页
  • 网网站建设公司徐州模板自助建站
  • 白银建设工程网站pjax wordpress
  • 搭建网站要什么配置天津西青区
  • 创建网站的过程湖南长沙公司
  • 点击网站出现微信二维码的链接怎么做网站开发中加入cad功能
  • 视频类网站备案50岁到55岁急招工
  • 卖汽车的网站怎么做网站首页结构
  • 云南省建设工程质量监督管理站网站商丘有哪些网络公司
  • 淘宝网站建设维护会计科目著名网站建设
  • 做建筑效果图最好的网站小猪会飞网站建设
  • 广告型网站建设微博搜索引擎优化
  • wordpress底部版权怎么修改汕头seo外包
  • 海南专业网站建设定制新乡手机网站建设公司
  • 网站建设服务哪个便宜啊wordpress 会员管理插件
  • 网站建设非功能需求wordpress vipsystem
  • 吉林城市建设学校网站华为外包做的网站
  • 惠州做网站开发wordpress style标签
  • 黄骅广信建设集团网站很多年前的51网站
  • 企业做网站需要多少钱信息系统项目管理高级
  • 网站建设方案 规划外贸网站优化谷歌关键词排名
  • 新网站快速提高排名开发网站的软件
  • 分分作网站爱最好网站建设
  • 品牌网站建设重點大蝌蚪网络营销的工作岗位有哪些
  • 家族网站模版中小企业微信网站建设
  • 淄博网站制作平台形象柏乡seo快排优化
  • 2008 iis 添加 网站 权限设置Wordpress 建立学生档案
  • 网站怎么做吸引人汉化主题 wordpress