【发布时间】:2011-04-25 15:28:41
【问题描述】:
我有一些守护进程不时崩溃,我想知道如何启用核心转储生成。 我知道默认情况下,Linux 上核心转储的 ulimit 为零,因此如果我想查看正在运行的进程的核心转储,我需要将其设置为无限制。 但我想做的是为在 root 帐户下运行的守护进程生成核心转储。 谁能告诉我如何配置系统?提前谢谢你。
【问题讨论】:
我有一些守护进程不时崩溃,我想知道如何启用核心转储生成。 我知道默认情况下,Linux 上核心转储的 ulimit 为零,因此如果我想查看正在运行的进程的核心转储,我需要将其设置为无限制。 但我想做的是为在 root 帐户下运行的守护进程生成核心转储。 谁能告诉我如何配置系统?提前谢谢你。
【问题讨论】:
我相信类似的东西:
ulimit -c unlimited
... 或某些值将允许您创建这些转储。此外,您可能需要查看以下网页了解更多详情:how to enable core 和 Linux FAQ
【讨论】:
我知道,这是一个多年前的问题,但它是在 google 搜索中出现的,并且接受的答案不完整(至少对于 Centos 而言)。
对于 RHEL 派生系统,大多数守护程序都有一个初始化脚本,该脚本获取一个名为:
/etc/sysconfig/{daemon_name}
例如,对于 apache 是:
/etc/sysconfig/httpd
这些文件中的环境变量在守护进程启动期间由init脚本读取,这些变量用于配置守护进程运行的环境。
要启用核心转储,请添加以下行:
export DAEMON_COREFILE_LIMIT='unlimited'
编辑此文件后重新启动守护程序。
您可能需要做的另一件事是更改内核核心转储文件名模板。默认情况下,核心转储将在当前工作目录中生成并具有名称“核心”。这不是很有用,因为它们会相互覆盖,而且在守护进程的情况下,它的工作目录可能 (a) 未知 (b) 不可写。要更改它:
sysctl -w kernel.core_pattern=/tmp/core_%e_%p
该设置是我的建议,您可以更改正在使用的目录的路径以及模式。上述模式将包含可执行文件名称和 pid。
要更永久地设置它,请编辑文件/etc/sysctl.conf 并插入:
kernel.core_pattern=/tmp/core_%e_%p
【讨论】: