Как починить mod_watch
Для apache есть весьма интересный «показометр» по нагрузке на отдельные виртуальные хосты. Пример картинки. Подробное и внятное руководство по уснтановке лежит здесь.
Однако, модуль почему-то обильно гадит в логи сообщениями вида
[error] shVerifyString(2b64251a2b78, 2b640fd4d710) failed!
[crit] (20014)Internal error: shGetLockedEntry(2b64251a2b78, "SERVER") failed in watchPostReadRequestHash()
Смотрим на строку 102 в файле SharedHash.c:
if ((char *) tp->shared <= str && str < (char *) tp->eshared)
Действительно, tp->shared указывает только на блок памяти, а реально используемый адрес начала блока получается при помощи функции apr_shm_baseaddr_get (так, кстати, сделано для вычисления верхней границы блока в функции shCreate). В результате в моём случае tp->shared всегда больше чем tp->eshared и сравнение всегда ложно. Правим следующим образом:
if ((char *) apr_shm_baseaddr_get(tp->shared) <= str && str < (char *) tp->eshared)
Теперь всё работает.