如何在发生段错误时从 Apache 获取核心转储

如何在发生段错误时从 Apache 获取核心转储

我按照网上很多地方的说明操作,了解如何在 apache 产生段错误时获取核心转储,但它仍然拒绝生成转储。

我有:

  1. 将指令添加CoreDumpDirectory到文件中httpd.conf并将其设置为/tmp
  2. 已执行 ulimit -c unlimited
  3. 提供使用转储的模式 echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
  4. 还跑了 echo 0 > /proc/sys/kernel/core_uses_pid

Httpd 已重新启动,但仍然没有创建转储。

我正在运行 CentOS 5.8 httpd-2.2.3-65.el5.centos.3x64php-5.3.20-13.el5.art

任何帮助将非常感激!

答案1

我的答案是这样的:

  1. 设置指令如下

    CoreDumpDirectory /tmp/mycoredump

  2. 创建目录:

    mkdir -p /tmp/mycoredump

  3. 为目录 www-data 或 httpd 分配所有权

    chown -R www-data:www-data /tmp/mycoredump

  4. 将权限设置为:

    chmod 777 /tmp/mycoredump

  5. 重新启动Apache:

    service apache2 restart

答案2

请注意,如果您已在您的(或您的系统上的任何名称)PrivateTmp=true中设置,这意味着 Apache 实际上会在内部查找类似的内容,Apache 将无法写入该目录,并且您根本不会转储核心(由于tmp 目录具有 700 个仅限根权限)。/usr/lib/systemd/system/apache2.service/tmp/tmp/systemd-private-c27fc5b152d546159d675e170641529b-apache2.service-IcEt0m/systemd

解决方案是PrivateTmp=false在服务器启动后设置或修改 systemd tmp 目录的权限。

我在这上面浪费了几个小时,直到现在才终于意识到问题所在。

相关内容