文章目录
- **一、临时配置(当前会话有效)**
- 1. **设置core文件大小限制**
- 2. **设置core文件命名格式(可选)**
- **二、永久配置(所有会话生效)**
- 1. **修改系统限制配置**
- 2. **修改内核参数**
- **三、高级配置选项**
- 1. **使用core dump过滤(内核5.12+)**
- 2. **启用systemd-coredump服务**
- **四、验证配置是否生效**
- **五、注意事项**
在Linux系统中配置core dump生成主要涉及调整系统限制和设置文件路径。以下是详细步骤:
一、临时配置(当前会话有效)
1. 设置core文件大小限制
使用ulimit
命令调整当前shell会话的core文件大小限制:
# 查看当前限制(0表示禁用)
ulimit -c# 允许生成core文件,不限制大小
ulimit -c unlimited# 或设置具体大小(单位:块,通常为512字节)
ulimit -c 10240 # 允许生成最大5MB的core文件
2. 设置core文件命名格式(可选)
通过修改/proc/sys/kernel/core_pattern
指定core文件的生成路径和命名规则:
# 示例1:在当前目录生成core文件,包含PID
echo "core.%p" | sudo tee /proc/sys/kernel/core_pattern# 示例2:统一存放到/tmp目录,格式为core.时间戳.PID
echo "/tmp/core.%t.%p" | sudo tee /proc/sys/kernel/core_pattern
支持的占位符:
%p
:进程ID%t
:时间戳(秒)%e
:程序名%h
:主机名
二、永久配置(所有会话生效)
1. 修改系统限制配置
编辑/etc/security/limits.conf
文件,添加以下内容:
# 为所有用户设置core文件大小无限制
* hard core unlimited
* soft core unlimited# 或为特定用户(如testuser)设置
testuser hard core unlimited
testuser soft core unlimited
2. 修改内核参数
编辑/etc/sysctl.conf
文件,添加或修改:
kernel.core_pattern = /tmp/core.%e.%p.%t
使配置生效:
sudo sysctl -p
三、高级配置选项
1. 使用core dump过滤(内核5.12+)
通过/proc/sys/kernel/core_mask
控制core文件包含的内存区域:
# 示例:仅包含代码段、数据段和栈
echo 0x33 | sudo tee /proc/sys/kernel/core_mask
2. 启用systemd-coredump服务
现代Linux系统推荐使用systemd-coredump
管理core文件(需要手动安装, sudo apt install systemd-coredump):
# 启用服务
sudo systemctl enable coredump.service
sudo systemctl restart coredump.service# 查看已收集的core文件
coredumpctl list# 用gdb分析特定core文件
coredumpctl gdb <PID>
四、验证配置是否生效
-
触发一个段错误测试:
echo 'int main() { *(int*)0 = 0; }' > crash.c gcc -o crash crash.c ./crash # 应该生成core文件
-
检查生成的core文件:
ls -l core* # 或查看/tmp目录
五、注意事项
- 磁盘空间:core文件可能非常大,建议配置到空间充足的分区。
- 安全风险:core文件可能包含敏感数据(如密码、密钥),需限制访问权限。
- 容器环境:Docker/Kubernetes默认禁用core dump,需通过
--privileged
或securityContext
单独配置。
通过以上配置,系统将在进程崩溃时生成包含关键调试信息的core文件,帮助开发者快速定位问题。