linux不形成core文件的解决办法:1、检查Coredump的目录是否存在并设置进程对该目录有写权限;2、检查服务程序是否调用seteuid();3、设置足够大的Core文件大小限制;4、修改profile等等。
本文操作环境:linux5.9.8系统、DellG3笔记本。
linux不形成core文件如何办?为何没有形成core文件?
一、要保证储存Coredump的目录存在且进程对该目录有写权限。
储存Coredump的目录即进程的当前目录,通常就是先前发出命令启动该进程时所在的目录。但若果是通过脚本启动,则脚本可能会更改当前目录,这时进程真正的当前目录还会与先前执行脚本所在目录不同。这时可以查看"/proc//cwd"符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方式查看。
二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这种进程生成Coredump。
好多服务程序还会调用seteuid(),如MySQL,不论你用哪些用户运行mysqld_safe启动MySQL,mysqld进行的有效用户仍然是msyql用户。假如你曾经是以用户A运行了某个程序,但在ps里听到的这个程序的用户却是B的话,这么这种进程就是调用了seteuid了。为了才能让那些进程生成Coredump,须要(echo"1">/proc/sys/kernel/suid_dumpable)。
三、这个通常都晓得红旗linux6.0教程,就是要设置足够大的Core文件大小限制了。
程序崩溃时生成的Core文件大小即为程序运行时占用的显存大小。但程序崩溃时的行为不可按平时时的行为来恐怕,例如缓冲区溢出等错误可能造成堆栈被破坏,因而常常会出现某个变量的值被更改成乱七八糟的linux生成core文件,之后程序用这个大小去申请显存就可能造成程序比平时时多占用好多显存。因而无论程序正常运行时占用的显存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。
四、在/etc/profile中添加:
ulimit -c unlimited > /dev/null 2?&1
登陆后复制
五、一般在CLI上启动的程序linux生成core文件,假如设置:
ulimit -c unlimited
登陆后复制
就可以在程序以外中止时生成coredump文件。并且对于daemon形式运行的程序,其与CLI启动的程序的主要区别是进程的运行环境,其中就包括
cwd(currentworkingdirectory)。假如以相对路径形式定义core文件的格式,例如定义/proc/sys/kernel/core_pattern为:
core-%e-%p-%t
登陆后复制
则通常来说,daemon文件的cwd就是/linux site:infoq.cn,你可以通过/proc//cwd来查看,通常都是联接到/目录。而假如用户对这个目录没有写权限,这么就不会生成coredump文件了。
最直接的解决的方式,是更改/proc/sys/kernel/core_pattern为绝对路径:/data/coredump/core-%e-%p-%t
但是保证这样就基本OK了。
更改/proc/sys/kernel/core_pattern文件中的coredump文件格式为绝对路径,例如:
/data/coredump/core-%e-%p-%t
登陆后复制
哪些时侯不形成core文件?
在下述条件下不形成core文件:
(a)进程是设置-用户-ID,并且当前用户并非程序文件的所有者;
(b)进程是设置-组-ID,并且当前用户并非该程序文件的组所有者;
(c)用户没有写当前工作目录的许可权;
(d)文件太大。core文件的许可权(假设该文件在此之前并不存在)一般是用户读/写,组读和其他读。
推荐学习:《linux视频教程》
以上就是linux不形成core文件如何办的详尽内容,更多请关注php英文网其它相关文章!