LINUX.ORG.RU
ФорумAdmin

server reached MaxClients

 , ,


0

5

Здравствуйте!

У меня VPS 500MHz/256Mb/ISPManager, сейчас активно заходит народ, 2 pageview в секунду, «CMS» = самописный сайт из 6 таблиц(MySQL) и 6 страниц на PHP. На VPS ещё крутятся сайты, но там посещалка 200 чел в сутки.

Стал часто видеть в логах ошибку из сабжа, точнее приходится перезагружать сервер, из-за неё. Режим работы апача - prefork.

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          50
    MaxRequestsPerChild   350
</IfModule>

График посещения. Серое - то что интересует. Где пустоты, это «захлёб» и приходилось перезагружать.

А это график того, что происходило на сервере

Понимаю, что RAM мало и значения в конфиге может быть завышены. Интересует такое - почему сервер с нагрузкой работает пару часов, а потом Апач «захлёбывается» и перестаёт отвечать? Ведь есть виртуальная память, почему апач не хочет её использовать, а новые соединения поставить в очередь. Тамайт стоит на 300 сек, а keepAlive 15


Ответ на: комментарий от kdask

да.

nginx ставить думаю нет смысла, т.к. статики мало, 3 css спрайта, да сам css, но будет возня с mod_rewrite и с isp-manager. но, если надо переехать на nginx, то займусь.

olegi
() автор топика

Понимаю, что RAM мало и значения в конфиге может быть завышены.

То, что мало рам по графикам как-то не видно. По-моему затык в процессоре.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Судя по графику с сервера (это OVH), RAM практически всегда возле 100% гуляет. Но оно и понятно, т.к. 256.

Вот статистика за неделю. Там четко видно как живет сервер в «мирное время» и когда пошел народ.

График с сервера

График посещалки

CPU гуляет в районе 80% и diskread начинается over 100% когда большая посещаемость. в течении часа оно может так работать, а потом захлёбывается. может быть это какой-то баг в софте?

вопросы:

как снять статистику что делает disk read, точнее какой процесс? php/apache/mysql или ещё что-то. сначала установить процесс, а потом уже конкретно файл приводящий к этому.

как сделать, чтобы если случается maxclients - то не принимает новых входящих? на hc.ru я видел такое. т.е. появляется заглушка «зайдите позже»

olegi
() автор топика
Ответ на: комментарий от olegi

Ага, на этих графиках более видна загрузка диска. Есть вариант, что в моменты нагрузки апач кушает память и ее не хватает на кеш диска. А зачем ставить такой большой MaxClients? Не лучше ли поставить нормальное значение?

чтобы если случается maxclients - то не принимает новых входящих?

Если больше maxclients, входящие ставятся в очередь. maxclients для prefork это макс количество процессов апача.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

правильно ли я понимаю, что похоже что случается так: внезапно приходит много клиентов, они все не помещаются в RAM, апач переносит их SWAP, и тут случается неведомая фигня, что отчасти вешает сервер?

Вот в 20-05 по мск снова случилось.

График с сервера.

Но появилась новая информация для размышления.

В обед поставил Monit, с монитором на Апач. И вот когда сервер «лежал», монит отвечал. Вместе с Апачем так же лежал ssh. В моните я попробовал рестартануть Apache - и это не помогло. т.е. оно писало мне stop pending..., start pending... но так и не запустилось, помог только reboot.

На что ещё можете посоветовать повестить монит, чтобы отследить, что забрало CPU? MySQL?

В prefork, PHP выполняется в контекстах процессов апача?

olegi
() автор топика
Ответ на: комментарий от olegi

правильно ли я понимаю, что похоже что случается так: внезапно приходит много клиентов, они все не помещаются в RAM, апач переносит их SWAP, и тут случается неведомая фигня, что отчасти вешает сервер?

Нет. Веб сайт состоит из кучи мелких файлов, и еще БД. В нормальном состоянии это все читается из кеша в памяти. Когда апач кушает память, кеш вытесняется, и все начинает читатся с диска и тормозить.

На что ещё можете посоветовать повестить монит

Советую поставить такое количество MaxClients, чтобы не забивало всю память (посмотреть сколько кушает один процесс апача) даже в экстренных случаях. Я на четырехядернике с 2Гб памяти ставил 40, по тестам больше не имело смысла (правда перед апачем стоял нжинкс), это было 10 процессов на ядро. Простейший тест можно сделать командой ab -с 50

В prefork, PHP выполняется в контекстах процессов апача?

Да.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Ну и если у вас включен свап, то конечно, от вытеснения одним процессом апача другого в свап а потом обратно, сервер встанет.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.