在 Apache 中启用核心转储

在 Apache 中启用核心转储

我想在我的 Apache Web 服务器中启用核心转储。
由于我使用的是 PHP 5.5 和 OPcache,所以我的 Mediawiki 网站崩溃并出现以下错误:

child pid ... exit signal Segmentation fault (11)

所以我想通过核心转储获取更多信息。

我创建了一个目录:/tmp/apache-coredump由(我的 apache 用户和组)拥有http:http并具有 777 权限。
我在httpd.conf文件中添加了以下内容:

CoreDumpDirectory   "/tmp/apache-coredump"

但是,现在(使用 CoreDumpDirectory 指令)我的 Apache 服务器在启动时崩溃:

sudo systemctl restart httpd

Job for httpd.service failed. 
See 'systemctl status httpd.service' and 'journalctl -xn' for details.

该期刊向我提供了以下信息

apachectl[4149]: CoreDumpDirectory /tmp/apache-coredump does not exist

我检查了一下,该目录存在 0_°

编辑:
我修改了文件CoreDumpDirectory中的指令httpd.conf,它允许我启动我的网络服务器

CoreDumpDirectory /tmp

如果没有 CoreDumpDirectory 指令,ServerRoot ( /etc/httpd) 目录中就不会生成核心转储。
我使用的是 Archlinux 3.10.6-2 64 位,带有 Apache/2.2.25 Prefork

答案1

核心转储通常默认被禁用,因为它们往往会浪费磁盘空间,您需要为 Apache 会话打开它们。

$ ulimit -a
core file size          (blocks, -c) 0
[...]
$ ulimit -c unlimited
$ systemctl restart httpd

另外,你启用了 SELinux 吗?输出ls -alZ /tmp/apache-coredump

答案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 目录的权限。

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

相关内容