linux core文件不生成原因及相关设置


程序出错产生core,core作为我们问题排查的依据,否则我们根本不知道发生了什么。所以产生core文件至关重要。
 
不产生core文件的原因排查 :
通常情况下,只要设置了ulimit -c unlimited,在程序崩溃后就会在当前目录下生成core文件
1.进程是设置 用户 id,当前用户并非程序文件的所有者
2.进程是设置 组 id,当前用户并非该程序文件的组所有者
1、2可以通过设置/proc/sys/kernel/suid_dumpable来改变,这样suid的也可以产生core文件
 
3.用户没有写当前工作目录的许可证
4.文件太大。core文件的许可证通常的用户读/写,组读和其他读。
 
 
系统core文件问题具体排查和相关设置
1. ulimit -a ,查看

 

 
 
core file size 如果是0,则表示没有打开core dump,我这里设置为不限制表示已经打开。
 
2. ulimit -c [kb]  设置core文件大小
ulimit -c 0 关闭core dump 开关
ulimit -c 100  core文件最大为100k
ulimit -c unlimited  不限制core文件大小
 
3.指定内核转存的文件名和目录
1)core文件自动加上进程号
echo 1 > /proc/sys/kernel/core_uses_pid
2)修改kernel参数,指定内核转存所产生的core文件的路径和文件名
可以通过在/etc/sysctl.conf文件中,对sysctl设置kernel.core_pattern的设置。
 
kernel.core_pattern = /var/core/core_%e_%p
kernel.core_uses_pid = 0
 

sysctl –p /etc/sysctl.conf

 
注:如果/proc/sys/kernel/core_uses_pid 这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。
这里%e, %p分别表示:
%c 转储文件的大小上限
%e 所dump的文件名
%g 所dump的进程的实际组ID
%h 主机名
%p 所dump的进程PID
%s 导致本次coredump的信号
%t 转储时刻(由1970年1月1日起计的秒数)
%u 所dump进程的实际用户ID 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM