Apache 挂起,Apache 错误日志显示“超时”

Apache 挂起,Apache 错误日志显示“超时”

我正在运行 OpenBSD 的 chrooted httpd 进程,过去几天我遇到了随机挂起的情况,这些挂起无需我的干预即可自行清除。起初我以为这可能是资源问题,因为 SSH 同时挂起,但控制台上一直运行着“top”,没有显示任何异常(内存使用率低,没有高负载等)。

我设法让我的用户在发生这种情况时(而不是 20-30 分钟后)准确地给我打电话,并在我的错误日志中注意到以下内容:

Timeout
^@Timeout
^@Timeout
^@Timeout

这就是全部内容。有时 ^@Timeout 的数量会有所不同,但这就是全部内容。我查看了访问日志,看看某些可能挂起的进程(如 curl 调用)是否可能正在执行此操作,但我没有看到任何关联。

该网站运行在自定义 PHP 应用程序中,直到最近,它都没有出现任何问题。在出现此问题的同时,没有推送任何新的代码更改。

还有人遇到过类似的情况吗,或者有什么想法吗?

[编辑 - 2009 年 6 月 11 日]

看起来这台服务器之外还发生了其他事情。超时打印似乎是随机发生的,但我认为在网络层面上也发生了同样的情况,即连接挂起。

不过还是感谢您的意见!

答案1

我们曾经遇到过类似的 SVN 问题。结果是系统熵池偶尔会完全耗尽,然后 SVN 和其他一些东西(不记得是什么了)就挂了。这可能是 SSH 的一个问题,如果 PHP 正在使用熵,那么 Apache 也可能存在这种情况。

您可以使用以下命令检查 OpenBSD 框中的熵值:

sysctl kern.random

作为输出,您将获得很多数字。这些描述如下/usr/include/dev/rndvar.h

struct rndstats {
        quad_t rnd_total;       /* total bits of entropy generated */
        quad_t rnd_used;        /* strong data bits read so far */
        quad_t rnd_reads;       /* strong read calls */
        quad_t arc4_reads;      /* aRC4 data bytes read so far */
        quad_t arc4_nstirs;     /* arc4 pool stirs */
        quad_t arc4_stirs;      /* arc4 pool stirs (bits used) */

        quad_t rnd_pad[5];

        quad_t rnd_waits;       /* sleeps for data */
        quad_t rnd_enqs;        /* enqueue calls */
        quad_t rnd_deqs;        /* dequeue calls */
        quad_t rnd_drops;       /* queue-full drops */
        quad_t rnd_drople;      /* queue low watermark low entropy drops */

        quad_t rnd_ed[32];      /* entropy feed distribution */
        quad_t rnd_sc[RND_SRC_NUM]; /* add* calls */
        quad_t rnd_sb[RND_SRC_NUM]; /* add* bits */
};

如果事实证明这确实是一个熵问题,您可以考虑/dev/urandom为您的 PHP 应用程序使用非强随机生成器,例如。

相关内容