我的 ubuntu 开发机器出现了一个奇怪的错误。这种情况已经持续了将近一年。同时,我在每个版本上都重新安装了 ubuntu(不仅仅是升级到下一个版本)。
每天当我打开我的机器时,我都会在 apache 的错误日志中看到这些错误,并且我的本地网站似乎非常慢:
[core:notice] AH00051: child pid 8467 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8467
[core:notice] AH00051: child pid 8469 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8469
[core:notice] AH00051: child pid 8479 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8479
[core:notice] AH00051: child pid 8481 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8481
[core:notice] AH00051: child pid 8482 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8482
[core:notice] AH00051: child pid 8485 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[core:error] AH00546: no record of generation 0 of exiting child 8485
这种情况一直持续到我执行sudo service apache2 restart
:此命令后,apache 正常启动并且一切正常。
我之所以说是午夜,是因为它每天在我打开电脑时都会发生,但由于工作量巨大,我不得不在午夜后工作几天,而且我注意到即使我的电脑已经打开,这个错误也会恰好在午夜出现。
我唯一想到的是 logrotate,它被设置为每天为 apache2 运行。我总是编辑此配置文件以使 apache 的日志用户可读可写(我需要它作为 PHP 日志读取器)。
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 777 root adm
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then \
invoke-rc.d apache2 reload > /dev/null 2>&1; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
可能是这个原因吗?我唯一修改过的就是那一create 777 root adm
行...
答案1
找到崩溃转储并从中获取带有人类可读符号的堆栈跟踪。
安装调试符号包至少对于 httpd。安装 gdb。
确定核心转储的去向。 请参阅 man core 以了解更多详细信息。
cat /proc/sys/kernel/core_pattern
如果以管道 ( |
) 为前缀,则表示您有一个崩溃处理系统,并且报告可能保存到/var/crash/
。使用以下方法获取跟踪apport-retrace --stdout
如果文件名有模式,则核心转储会转到那里。阅读 gdb 手册以了解如何加载核心文件。
通过这些符号,您可以知道崩溃的位置,并将其报告给您的 Apache HTTPD 支持渠道。