每天午夜后都会出现 Apache2 分段错误

每天午夜后都会出现 Apache2 分段错误

我的 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 支持渠道。

相关内容