segfaulting时如何从Apache获取核心转储


13

我遵循了许多在线位置的说明,内容是有关在生成段错误时如何从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已重新启动,但仍未创建转储。

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

任何帮助将非常感激!


apache是​​否有权写入您在CoreDumpDirectory指令中指定的文件?它应该归Apache所有。
Valentin Bajrami

我将其设置为/ tmp,该目录是可公开写的,但我将尝试在其他地方将其所有权授予apache
chrismcb 2013年

谢谢-确实产生了转储,但是不在我设置的位置!我将设置为CoreDumpDirectory/tmp/dumps然后将其转储到/tmp...现在进行调试
chrismcb

恭喜你弄明白了!
Valentin Bajrami

Answers:


7

我的答案是这样的:

  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


是的,我只是这样做的,但最终还是倒入/tmp了它!
chrismcb

6
这是不是一个好主意,以chmod 777什么
sendmoreinfo

1
@sendmoreinfo但是,如果您的用例使外部环境完全可修改和可执行,该怎么办?;-)
avgvstvs

8
您可以用脚开枪射击自己,只是不要讲这个。
sendmoreinfo

0

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

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

我为此花了几个小时,直到现在才终于意识到问题出在哪里。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.