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

Необычно большое количество процессов httpd и высокая загрузка ЦП на членах набора реплик MongoDB

Я исследую странное поведение на 3 машинах CentOS, которые служат набором реплик MongoDB, тогда как на одной из них также размещено веб-приложение PHP, использующее набор реплик MongoDB. Базовая настройка выглядит следующим образом:

Теперь все они испытывают почти постоянную 100% загрузку процессора. Нагрузка вызвана большим количеством запущенных процессов httpd. Даже на узлах 2 и 3, которые почти не имеют HTTP-трафика. Использование ЦП процессом mongod на каждой машине исчезающе мало.

Это то, что top вывод на узле 2 выглядит так:

Результат выглядит очень похоже на узлах 1 и 3. Вот как выглядит журнал доступа httpd на узле 2:

Мне кажется странным наличие большого количества процессов httpd, но очень маленького количества реальных HTTP-запросов. Когда я проверяю netstat -p на узле 2 я вижу что-то вроде этого:

Открытые сокеты mongod должны быть работниками репликации или набором реплик, но что действительно поражает в netstat -p вывод: дополнительное количество открытых сокетов httpd (?!), поступающих из порта 27017 MongoDB на их аналоге (узел 3).

В результате вход в систему (например, через SSH) через некоторое время становится чрезвычайно медленным. Перезапуск httpd работает в краткосрочной перспективе, количество процессов httpd и загрузка процессора мгновенно падает до нормального уровня. Но через несколько часов процессы / сокеты httpd снова заполняются, и компьютер снова загружается на 100% ЦП. Перезапуск httpd не влияет на работу набора реплик.

Я не уверен, но думаю, что в конфигурации Apache prefork / worker нет ничего особенного:

<IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    ServerLimit      256
    MaxClients       256
    MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
    StartServers         2
    MaxClients         150
    MinSpareThreads     25
    MaxSpareThreads     75 
    ThreadsPerChild     25
    MaxRequestsPerChild  0
</IfModule>

Короче говоря...

Оказалось, что огромное количество процессов httpd, открытых соединений и, как следствие, высокая загрузка ЦП каким-то образом являются результатом старой и неработающей конфигурации SSL (дубликат VirtualHost с разными просроченными сертификатами) в Apache conf.d папка.

Поскольку сообщений об ошибках не было вообще, я трижды проверил конфигурации и предпринял несколько попыток проб и ошибок. Удаление конфигурации SSL привело к значительному сокращению запущенных процессов httpd, а также к тому, что соединения остались открытыми. Загрузка процессора упала до штатного уровня.

Проблема решена, откуда взялось это странное явление и при чем тут неработающая конфигурация SSL. Тем не менее меня все еще интересует странная связь между членами набора реплик MongoDB и сокетами httpd, которые все еще появляются в netstat -p.