【问题标题】:How to generate core dumps for daemon processes in centos?如何在 centos 中为守护进程生成核心转储?
【发布时间】:2011-04-25 15:28:41
【问题描述】:

我有一些守护进程不时崩溃,我想知道如何启用核心转储生成。 我知道默认情况下,Linux 上核心转储的 ulimit 为零,因此如果我想查看正在运行的进程的核心转储,我需要将其设置为无限制。 但我想做的是为在 root 帐户下运行的守护进程生成核心转储。 谁能告诉我如何配置系统?提前谢谢你。

【问题讨论】:

    标签: linux centos coredump


    【解决方案1】:

    我相信类似的东西:

    ulimit -c unlimited
    

    ... 或某些值将允许您创建这些转储。此外,您可能需要查看以下网页了解更多详情:how to enable coreLinux FAQ

    【讨论】:

    • 实际上,我查看了该站点,但内容与我机器上的页面内容略有不同,我无法使其正常工作。不过谢谢你的回复。我会继续努力,如果我能让它工作,我会在这里发布。再次感谢!
    • 以上链接很有帮助,但我找到了另一个链接 - bonsai.com/wiki/howtos/debugging/daemon_core。这个链接对我更有用。
    • 对于 Debian Wheezy 系统,情况似乎与 RedHat 特定链接有所不同。我刚刚在重启守护进程后得到了很好的结果:echo "ulimit -c unlimited" | sudo tee /lib/lsb/init-functions.d/core-limit
    【解决方案2】:

    我知道,这是一个多年前的问题,但它是在 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
    

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2012-03-13
      相关资源
      最近更新 更多