Apache не убивает потоки более 20 минут после достижения максимального количества потоков - PullRequest
0 голосов
/ 20 декабря 2011

Я использую сервер Linux с 2 ядрами Xeon Quad, RAID10 и 8 ГБ ОЗУ.Я обслуживаю некоторые продукты, которые не используют для перегрузки сервера, но 3–4 раза в месяц, из-за характера продуктов, я получаю огромное количество клиентов, которые обращаются к нему.Например, я получил 1 000 000 запросов за 3 часа.Сервер имеет 2 Гб для MySQL и Apache2, ограниченный 1500 потоками, использующими mpm.Проблема в том, что когда сервер достигает максимального количества потоков (сервер достиг значения MaxClients, рассмотрите возможность увеличения параметра MaxClients), средняя загрузка сервера становится действительно высокой, она колеблется от 15 до 400 или около того, и даже после остановки клиентовпри доступе число потоков Apache остается действительно высоким, и может потребоваться более 20 минут, чтобы уменьшить их количество.Делая ps aux, я вижу, что процесс создается одновременно с достижением сервером максимального количества потоков.Если я делаю пару из них, я ничего не делаю.У MSQL нет ожидающих запросов.

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit         2000
    #ListenBacklog      2000 #have just commented this out
    #MaxClients          150
    MaxClients          1500
    #MaxRequestsPerChild   0
    MaxRequestsPerChild   10000 # have just setted this value
</IfModule>

Как я могу предотвратить это?Почему эти темы не умирают или не заканчиваются?

Я ожидаю сегодня 1.000.000 обращений снова.

Заранее спасибо

1 Ответ

0 голосов
/ 21 декабря 2011

В Apache есть опция KeepAliveTimeout, в которой указывается, сколько секунд ждать запроса перед закрытием соединения.Для этого необходимо, чтобы для параметра KeepAlive было задано значение On.

Также имеется параметр Timeout, в котором указывается максимальное количество секунд ожидания запроса GET, POST, PUT

Возможно, вам придется поэкспериментировать.с этой опцией, пока вы не найдете лучший баланс для вашей рабочей нагрузки и вашего приложения.Вероятно, хорошим решением может быть KeepAlive On с низким значением Timeout и KeepAliveTimeout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...