我的新贵工作有时会因分段错误而崩溃,并且我对核心转储有一些疑问。
首先,我应该添加一个节:
limit core unlimited unlimited
允许无限的内核大小有不利之处吗?有限的限制会更好吗?
第二,核心文件会去哪里?如果默认位置不是标准位置或逻辑位置,如何使它显示在其他位置?
我的新贵工作有时会因分段错误而崩溃,并且我对核心转储有一些疑问。
首先,我应该添加一个节:
limit core unlimited unlimited
允许无限的内核大小有不利之处吗?有限的限制会更好吗?
第二,核心文件会去哪里?如果默认位置不是标准位置或逻辑位置,如何使它显示在其他位置?
Answers:
在大多数情况下,不建议使用无限的核心转储,但从技术上讲可以。核心转储仅具有当前进程拥有的“所有内存”。因此最多只能和您的ram + swap一样大。希望您有更多的可用空间。
在现实生活中,与总的RAM +掉期相比,它们应该“小”。
文件“应该”以“当前目录”结尾。对于不需要chdir的新贵任务,通常是/。如果它们确实更改了目录,那么您可以自己寻找它们。但是,您可以为它们硬编码一条路径。
您应该能够检查/proc/sys/kernel/core_pattern
“模式”。如果将模式设置为类似的样式,echo "/var/log/core" > /proc/sys/kernel/core_pattern
则所有内核都应以/ var / log结尾
核心文件是当进程意外终止时由操作系统创建的进程的映像。当程序由于错误或违反CPU或内存保护机制而行为异常时,将创建核心文件。操作系统将杀死该程序并创建核心文件。
该文件对于确定进程出了什么问题可能非常有用。默认情况下,可以启用核心文件的生成,具体取决于您所拥有的Linux的发行版和版本。
如果根本不需要核心文件,请在启动文件中设置“ ulimit -c 0”。这是许多系统上的默认设置。在/etc/profile
你可能会发现
由于截断的文件没有实际用途,因此请将Linux核心文件的大小设置为“无限制”。
Usage of ulimit Action
ulimit -c # check the current corefile limit
ulimit -c 0 # turn off corefiles
ulimit -c x # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited # turn on corefiles with unlimited size
ulimit -n unlimited # allows an unlimited number of open file descriptors
ulimit -p # size of pipes
ulimit -s # maximum native stack size for a process
ulimit -u # number of user processes
help ulimit #list of other options
核心文件放置在该进程的当前工作目录中,并受JVM进程的写许可权和可用磁盘空间的限制。
根据内核级别,可用的有用内核选项可为corefile提供更有意义的名称。作为root用户,选项sysctl -w kernel.core_users_pid = 1确保核心文件的名称形式为“ Core.PID”。
ulimit -S -c 0 > /dev/null 2>&1
如果您确实需要核心文件,则需要在自己的.bash_profile中将其重置:
ulimit -c 50000
将允许核心文件,但将其限制为50,000字节。
您可以更好地控制核心文件 /proc/sys/kernel/
例如,您可以通过以下方法消除pid上的标记
echo "0" > /proc/sys/kernel/core_uses_pid
然后,核心文件将仅被命名为“核心”。人们这样做是为了使用户可以选择将一个名为“ core”的不可写文件放置在他们不想生成核心转储的目录中。那可能是目录(mkdir核心)或文件(touch核心; chmod 000核心)。
但也许更有趣的是,您可以执行以下操作:
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern
然后,所有核心文件都被抛弃/tmp/corefiles
(如果这样做,请勿更改core_uses_pid)。
使用简单的脚本对此进行测试:
# script that dumps core
kill -s SIGSEGV $$
在Ubuntu下,核心文件的创建是通过file来控制的/etc/default/collectd
。您可以通过设置启用创建核心转储:
ENABLE_COREFILES=1
找到核心文件
守护程序崩溃后,将在其当前工作目录中创建一个文件。默认情况下,这是pkglocalstatedir
,即prefix/var/lib/collectd
。如果您安装了软件包,则该目录很可能是/var/lib/collectd
。
资料来源:AP Lawrence和IBM