No.
2023-05-30
  • Jan
  • Feb
  • Mar
  • Apr
  • May
  • Jun
  • Jul
  • Aug
  • Sep
  • Oct
  • Nov
  • Dec
  • Sun
  • Mon
  • Tue
  • Wed
  • Thu
  • Fri
  • Sat
  • 28
  • 29
  • 30
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Linux 系统生成 core 文件设置

默认 Linux 系统不生成 core 文件,要产生 core 文件则按以下设置实现:

1. 修改系统资源限制

可以通过 ulimit -a 查看系统各种资源限制,如 core 文件大小,数据段大小,打开文件数目等等。如:

ulimit_0.png

可以看到,core 文件默认大小为 0, 因此不会产生 core 文件,使用 ulimit -c n 来设置 core 文件大小,单位为 KB,如:

ulimit -c 100 设置 core 文件最大为 100KB。
ulimit -c unlimited 不限制 core 文件大小。

ulimit_unlimited.png

此设置只针对当前会话有效,如果想要长久生效,可以将配置写入 /etc/security/limits.conf 中。

* soft core unlimited
* hard core unlimited
  • 该文件第一列表示用户和组,第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值。
  • soft 和 hard 的区别:soft 是一个警告值,hard 是真正意义的限制值。一般设置为相同值。
  • core 是内核文件,nofile 是文件描述符,noproc 是进程数。

另一种长久生效的方法是将配置命令 ulimit -c unlimited 写入 ~/.bashrc 文件中。

2. 设置 core 文件配置

修改两个 core 相关配置文件 /proc/sys/kernel/core_pattern 和 /proc/sys/kernel/core_uses_pid。

echo "core-%p" > /proc/sys/kernel/core_pattern
echo "1" > /proc/sys/kernel/core_uses_pid

ubuntu 系统中需要使用 sysctl -w 来写入:

sudo sysctl -w kernel.core_pattern = core
sudo sysctl -w kernel.core_uses_pid = 1

写入这两个文件也只是在当前会话生效,需要长久生效的方法是将配置写入 /etc/sysctl.conf,在该文件中添加以下两行:

kernel.core_uses_pid = 1
kernel.core_pattern = core-%p