Добрый день!Прошу помочь с решением проблемы :(
Есть удаленный сервер FreeBSD 5.3
На нем прилично нагруженый апач, собран с
#define HARD_SERVER_LIMIT 2048Если в конфиге апача стоит
MaxClients 768
все работает как часики.Если ставлю MaxClients в бОльшее число, например 1024, то при большом наплыве посетителей сервер затыкается. То есть перестает отвечать вообще на любые запросы, включая ssh и т.п. Через некоторое время он очухивается и начинает отвечать, но весьма нестабильно - то есть отклик, то снова затык...
Вот прицесс затыка гляди из vmstat 5:
procs memory page disks faults cpu
r b w avm fre flt re pi po fr sr ad0 ad2 in sy cs us sy id
0 0 0 1402400 131740 657 8 2 0 416 0 8 0 2157 7967 3572 10 6 84
1 1 0 1399868 129416 457 5 1 0 686 0 5 0 1184 6380 1832 7 3 90
0 7 0 1396364 130048 152 0 0 0 199 0 25 0 586 2347 795 2 2 97
0 27 0 1398664 127904 230 2 1 0 106 0 5 0 698 1191 796 3 1 96
0 39 0 1399912 130864 137 0 1 0 319 0 0 0 543 508 627 0 1 99
0 27 0 1399060 129652 329 2 0 0 268 0 2 0 658 1451 728 3 2 95
0 17 0 1405192 125128 278 0 1 0 218 0 2 0 611 2392 745 2 2 96
0 11 0 1412048 122036 291 1 1 0 282 0 4 0 864 1691 991 11 3 86
3 14 0 1415164 120224 315 0 1 0 309 0 1 0 633 2104 696 4 2 94
0 27 0 1417168 118596 404 0 1 0 409 0 21 0 590 2707 751 4 2 94
(тут он заткнулся окончательно...)Я вижу, что при затыке появляется некоторое количество процессов в состоянии b:
b blocked for resources (i/o, paging, etc.)Но выяснить, каких именно ресурсов ожидают процессы у меня не выходит :(
В системе 3 ГБ памяти,
kern.maxfiles: 12328
kern.openfiles: 1982 (обычно не больше 2000)
kern.maxproc: 6164 (затыки начинаются при количестве процессов >1000)
kern.maxfilesperproc: 11095
kern.maxprocperuid: 5547Параметр load average во время затыка падает до значения близкого к 0.
Во время затыка удалось сделать ps awlx, процессы апача выглядят приблизительно так:
UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
80 27050 7029 0 4 0 3012 2424 accept S ?? 0:01.98 /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd-ligh
80 27053 7029 0 4 0 2952 2372 sbwait S ?? 0:01.35 /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd-ligh
80 27208 7029 0 4 0 2952 2368 sbwait S ?? 0:00.75 /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd-ligh
80 27259 7029 0 -16 0 3012 2428 zoneli D ?? 0:01.44 /usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd-ligh
Может кто-нибудь подскажет, куда именно нужно смотреть, чтобы понять в чем проблема?
>Может кто-нибудь подскажет, куда именно нужно смотреть, чтобы понять в >чем проблема?В
/var/log/messages
>>Может кто-нибудь подскажет, куда именно нужно смотреть, чтобы понять в >чем проблема?
>
>В
>/var/log/messages
В /var/log/messages пусто. Никаких сообщений об ошибке.
Если же во время затыка далаю ребут, то появляются сообещния:
Nov 25 22:31:34 reboot: rebooted by root
Nov 25 22:33:17 kernel: pid 3476 (httpd), uid 80: exited on signal 11
Nov 25 22:33:17 kernel: pid 3463 (httpd), uid 80: exited on signal 11
(несколько десятков)Если не ребутить, а дать серверу очухаться самому, то никаких сообщений вообще не появляется.
В логах апача также никаких сообщений нет.
По признакам смахивает на диск. Большая очередь запросов на i/o на фоне практически нулевой LA. В любом случае, на такой сервер ставить обычный пошлый IDE (устройство ad) неразумно - разоритесь на SCSI массив из 3-5 дисков.
>По признакам смахивает на диск. Большая очередь запросов на i/o на фоне
>практически нулевой LA. В любом случае, на такой сервер ставить обычный
>пошлый IDE (устройство ad) неразумно - разоритесь на SCSI массив из
>3-5 дисков.Не, не диск...
Стоит SATA150 диск, который по данным systat при 768 одновременных запросах нагружен весьма мало - 10-20%: 10-20tps и ~1MB/sec
Большинство затребованой информации просто висит в кэше...
>Если ставлю MaxClients в бОльшее число, например 1024, то при большом наплыве
>посетителей сервер затыкается. То есть перестает отвечать вообще на любые запросы,Какие апачевские модули активны, нет ли не из комплекта апача ?
>включая ssh и т.п.
netstat -m что говрит в такие моменты ?
Сколько по netstat -an|wc ?
Похоже упирается в kern.ipc.somaxconn или kern.ipc.maxsockets
Проблема решена простым увеличением kern.maxusers до 1024Прошу прощение, что побеспокоил ламерским вопросом.
Спасибо все откликнувшимся :)