不明所以的core文件,就这样出现了
登陆集群处理数据时候,蓦然间出现了很多core文件,特别是在做批量化作业的时候,core文件尤其的多,让我对运行的命令产生了极大的怀疑。
赶紧用file查看一下是啥情况:
$ file core.28416
core.28416: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from ‘/home/user/.vscode-server/cli/servers/Stable-xxxxxxa4e9cc93428cc27a5’, real uid: 1017, effective uid: 1017, real gid: 1017, effective gid: 1017, execfn: ‘/t he/path/.vscode-server/cli/servers/Stable-xxxx93428cc27a56ba40.staging/server/node’, platform: ‘x86_64’
感觉跟vscode相关,亦或者不是。
调研了一下,在 Linux 中生成的 core 文件,是程序崩溃时生成的转储文件,可以用来帮助进行调试和分析。
除非对调试很熟悉,所以还是把这个功能禁止掉为妙,方法如下:
$ ulimit -c 0
此后就天下太平,绝少打扰。
不过,如果真的想知道如何调试,发生了什么,也可以对该core文件进行一些配置,debug。
设置 core 文件生成的限制
默认情况下,Linux 默认可能会限制 core 文件的生成。使用以下命令取消该限制:
$ ulimit -c unlimited
这将允许系统生成不限大小的 core 文件。可以在当前会话中使用,也可以将其添加到用户的 shell 配置文件(例如 ~/.bashrc 或 ~/.bash_profile)中以永久生效。
配置 core 文件存放位置和命名格式
core 文件默认生成在当前工作目录,并且后面的序号递增来实现,比较不具有参考意义,可以通过修改 /proc/sys/kernel/core_pattern 来改变路径和文件名格式。
编辑配置:
sudo sysctl -w kernel.core_pattern=/path/to/directory/core-%e-%p-%t
%e:可执行文件名
%p:进程 ID
%t:崩溃时间戳
例如,将 core 文件放在 /tmp/corefiles 中,可以使用:
sudo mkdir -p /tmp/corefiles
sudo sysctl -w kernel.core_pattern=/tmp/corefiles/core-%e-%p-%t
不过需要确保进程运行的用户对配置的 core 文件路径有写入权限,否则 core 文件就无法生成了。
使用调试器分析 core 文件
生成 core 文件后,可以用 gdb 等调试器分析:
$ gdb /path/to/executable /path/to/corefile
这样可以查看崩溃时的调用栈等信息,便于定位问题。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/423276.html