Назад | Перейти на главную страницу

Apache зависает с журналами ошибок Apache с сообщением "Тайм-аут"

Я запускаю chrooted httpd процесс OpenBSD, и в течение последних нескольких дней я получаю случайные зависания, которые исчезают без какого-либо вмешательства с моей стороны. Сначала я подумал, что это может быть проблема с ресурсами, поскольку SSH зависает в то же время, но оставил на консоли запущенный «верхний», который не показывает ничего необычного (использование памяти низкое, нет высокой нагрузки и т. Д.).

Мне удалось заставить пользователей звонить мне именно тогда, когда это происходит, а не через 20-30 минут, и я заметил в журналах ошибок следующее:

Timeout
^@Timeout
^@Timeout
^@Timeout

Это все, что стоит на кону. Иногда количество таймаутов ^ @ различается, но это все, что есть. Я просмотрел журналы доступа, чтобы узнать, могут ли это делать некоторые из потенциально зависающих процессов, таких как вызовы curl, но я не заметил никакой корреляции.

Сайт, работающий в настраиваемом приложении PHP, у которого до недавнего времени не было никаких проблем. Одновременно с этим не было внесено никаких изменений в код.

Кто-нибудь еще сталкивался с подобной ситуацией или есть какие-то идеи?

[Изменить - 11.06.2009]

Похоже, что-то еще происходит за пределами этого сервера. Отпечатки тайм-аута, кажется, происходят случайно, но я думаю, что то же самое происходит на сетевом уровне, когда соединения зависают.

Спасибо за вклад!

Однажды у нас была аналогичная проблема с 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-приложения.