我按照网上很多地方的说明操作,了解如何在 apache 产生段错误时获取核心转储,但它仍然拒绝生成转储。
我有:
- 将指令添加
CoreDumpDirectory
到文件中httpd.conf
并将其设置为/tmp
- 已执行
ulimit -c unlimited
- 提供使用转储的模式
echo '/tmp/core-%e.%p' > /proc/sys/kernel/core_pattern
- 还跑了
echo 0 > /proc/sys/kernel/core_uses_pid
Httpd 已重新启动,但仍然没有创建转储。
我正在运行 CentOS 5.8 httpd-2.2.3-65.el5.centos.3
x64php-5.3.20-13.el5.art
任何帮助将非常感激!
答案1
我的答案是这样的:
设置指令如下
CoreDumpDirectory /tmp/mycoredump
创建目录:
mkdir -p /tmp/mycoredump
为目录 www-data 或 httpd 分配所有权
chown -R www-data:www-data /tmp/mycoredump
将权限设置为:
chmod 777 /tmp/mycoredump
重新启动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 目录的权限。
我在这上面浪费了几个小时,直到现在才终于意识到问题所在。