VDS - отказы в ресурсах (количество процессов)

12
S9
На сайте с 28.07.2009
Offline
2
3602

cent-os-5.1

Софт стандартный от хостера (апач, фтп, почтовый сервер), ставили они сами.

Резко возросло количество отказов в ресурсах (количество запущенных процессов) Остальные ресы норм, менее 20%. Началось в середине прошлого месяца, ежедневно 12 отказов. Последние несколько суток возросло до 9090 ежедневно . Пару раз пришлось перегружать vds, завис или что-то в этом роде. При чем в VDSmehager'e в текущей нагрузке количество процессов всегда в пределах допустимого. Отказы в запуске процессов видны только в статистике отказов VDSmehager'а. И еще такой нюанс. Когда в статистике отказов появляются данные за новый день, то сразу 4545 отказо в запуске процессов, т.е. половина, так сказать, дневной нормы. Когда появляются данные за следующий день, 4545 становится 9090, а за текущий день снова 4545.

У vds я так понял довольно сильные ограничения на максимальное количество процессов (на моем тарифе предел - 60). Поддержка советует ставить nginx, но мне кажется дело не в высокой нагрузке. Логи апача посмотрел, там есть такие строчки

[Sun Oct 11 18:56:49 2009] [error] (12)Cannot allocate memory: fork: Unable to fork new process

но их не много. Да и подозрительно это как-то, одинаковое ежедневное количество отказов возникающих в один момент.

Можно как то узнать Какому процессу отказано в запуске? Что вообще можно сделать в этой ситуации.

M
На сайте с 16.09.2009
Offline
278
#1

а сколько процессов запущено в штатных условиях?

посмотрите ps/top

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
S9
На сайте с 28.07.2009
Offline
2
#2

в штатных условиях 28 - 30 процессов

посмотрите ps/top

Этого я не понял. top показывает 31 процесс сейчас.

M
На сайте с 16.09.2009
Offline
278
#3

судя по сообщению об ошибке - может памяти нехватать

это VDS на OpenVZ или Virtuozzo?

посмотрите /proc/user_beancounters - там скапливается некоторая статистика

http://wiki.openvz.org/Proc/user_beancounters

S9
На сайте с 28.07.2009
Offline
2
#4

OpenVZ

Отказов по мамяти вообще небыло нигогда.

/proc/user_beancounters

uid resource held maxheld barrier limit failcnt

6037: kmemsize 4198350 6771830 67108864 67108864 0

lockedpages 0 0 256 256 0

privvmpages 38993 79277 153600 204800 0

shmpages 926 1630 21504 21504 0

dummy 0 0 0 0 0

numproc 35 60 60 60 4545

physpages 19147 26036 0 2147483647 0

vmguarpages 0 0 51200 51200 0

oomguarpages 19147 26037 51200 51200 0

numtcpsock 17 55 6000 6000 0

numflock 4 12 188 206 0

numpty 1 1 16 16 0

numsiginfo 0 60 256 256 0

tcpsndbuf 158756 389064 24576000 24576000 0

tcprcvbuf 278528 600164 24576000 24576000 0

othersockbuf 86504 517512 1126080 2097152 0

dgramrcvbuf 0 38556 262144 262144 0

numothersock 50 184 6000 6000 0

dcachesize 263376 357363 3409920 3624960 0

numfile 1198 2018 6000 6000 0

dummy 0 0 0 0 0

dummy 0 0 0 0 0

dummy 0 0 0 0 0

numiptent 13 13 128 128 0

P
На сайте с 08.03.2007
Offline
250
#5

Поставьте nginx первым делом, как и было сказано. Зачем у поддержки спрашивать совета, если Вы его даже не пытались исполнить?

Pilat добавил 18.10.2009 в 12:02

Может, количество отказов - это количество индексируемых страниц?

M
На сайте с 16.09.2009
Offline
278
#6
stran9er:

numproc 35 60 60 60 4545

да, дело в numproc - остальное за границы тарифа не вылезает.

вполне вероятно, что проблема в апаче: куча медленных клиентов вполне может

создать ситуацию, когда количество процессов httpd вылезет за границы.

можете ограничить MaxClients, чтобы влезало в ограничения - и посмотреть что будет ;)

stran9er:

Можно как то узнать Какому процессу отказано в запуске? Что вообще можно сделать в этой ситуации.

почему бы и нет, раз у вас access_log апача есть - смотрите там, какой запрос

в тот момент отработал с ошибкой

S9
На сайте с 28.07.2009
Offline
2
#7
Поставьте nginx первым делом, как и было сказано. Зачем у поддержки спрашивать совета, если Вы его даже не пытались исполнить?

У меня лицензия на скрипт на внешний ip, не нашел пока, как сделать чтобы скрипт (апач) детектил его.

Может, количество отказов - это количество индексируемых страниц?

Это типа паук какой-то пытается разом все страницы загрузить? Попробую посчитать страницы :) .

можете ограничить MaxClients, чтобы влезало в ограничения - и посмотреть что будет

Как его ограничить?

раз у вас access_log апача есть - смотрите там, какой запрос
в тот момент отработал с ошибкой

access_log апача содержит только такие строки, различие в дате времени

::1 - - [13/Oct/2009:07:33:42 -0700] "OPTIONS * HTTP/1.0" 200 - "-" "Apache/2.2.3 (CentOS) (internal dummy connection)"
M
На сайте с 16.09.2009
Offline
278
#8
stran9er:
У меня лицензия на скрипт на внешний ip, не нашел пока, как сделать чтобы скрипт (апач) детектил его.

нет ничего невозможного, к nginx'у это отношения не имеет

stran9er:

Как его ограничить?

изменить значение MaxClients в конфиге апача, перезапустить апач

stran9er:
access_log апача содержит только такие строки, различие в дате времени

это _все_ что в access_log? т.е. вы отключили логгирование для всех виртуальных хостов?

если нет - смотрите в соответствующих лог-файлах

S9
На сайте с 28.07.2009
Offline
2
#9

я впревые взял vds в августе этого года, сам ничего не настраивал, поставил только зенд отптимайзер и ионкьюб. В администрировании серверов мало что понимаю.

нет ничего невозможного, к nginx'у это отношения не имеет

Сайты все используют скрипт привязанный к внешнему ip, если апач не правильно детектит его сайты работать не будут. В случае если поставить nginx фронтендом к апачу, как советует поддержка, апач будет детектить 127.0.0.1 (или что-то в этом роде)

вы отключили логгирование для всех виртуальных хостов?

Тут я все меньше понимаю. Если под "виртуальных хостов" имеется в виду дополнительные домены добввленные на сервер, то логи есть и есть ошибки возникающие при каждой загрузке страницы.


[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_parser_set_option(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 63
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_object(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 64
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_object(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 64
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_element_handler(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 65
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_set_character_data_handler(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 66
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_parser_free(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 68
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_parse(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 73
[Sun Oct 18 15:33:46 2009] [error] [client 93.158.144.28] PHP Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of xml_parse(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /var/www/user/data/www/site.ru/libs/XMLparser.php on line 73

Страницы при этом грузятся нормально, автор скрипта говорит что на это можно забить, да и отказы в запуске возникают не в течении суток постепенно накапливаясь, а в один момент, если конечно статистика в файл /proc/user_beancounters пишется в риалтайм

M
На сайте с 16.09.2009
Offline
278
#10
stran9er:
Сайты все используют скрипт привязанный к внешнему ip, если апач не правильно детектит его сайты работать не будут. В случае если поставить nginx фронтендом к апачу, как советует поддержка, апач будет детектить 127.0.0.1 (или что-то в этом роде)

можно обучить апач делать правильно - см, например, mod_rpaf

stran9er:

Тут я все меньше понимаю. Если под "виртуальных хостов" имеется в виду дополнительные домены добввленные на сервер, то логи есть и есть ошибки возникающие при каждой загрузке страницы.

Есть ошибка, которую Вы цитировали (can't fork). Время события вы знаете. Логично

поискать в access_log'ах запросы в окрестности этого момента со статусом ошибки?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий