目录
在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>
四、验证配置是否生效
1. 触发一个段错误测试:
echo 'int main() { *(int*)0 = 0; }' > crash.c
gcc -o crash crash.c
./crash # 应该生成core文件
2. 检查生成的core文件:
ls -l core* # 或查看/tmp目录
五、注意事项
磁盘空间:core文件可能非常大,建议配置到空间充足的分区。
安全风险:core文件可能包含敏感数据(如密码、密钥),需限制访问权限。
容器环境:Docker/Kubernetes默认禁用core dump,需通过--privileged
或securityContex
t单独配置。
通过以上配置,系统将在进程崩溃时生成包含关键调试信息的core文件,帮助开发者快速定位问题。