Я исследую странное поведение на 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
.