我想在我的 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 目录的权限。
我在这上面浪费了几个小时,直到现在才终于意识到问题所在。