Re: оптимизация системы для nginx

Gena Makhomed gmm на csdoc.com
Ср Фев 17 21:33:01 MSK 2010


On 17.02.2010 18:40, calculator at land.ru wrote:

> worker_processes 8;
> worker_connections 16384;

16384 * 8 == 65536 * 2

> fs.file-max = 65536

fs.file-max - это system file descriptor limit.
65536 может быть слишком мало для веб-сервера.

текущее использование дескрипторов
можно посмотреть в sysctl fs.file-nr

кроме лимита на всю систему в CentOS есть лимит
по умолчанию на каждый процесс: 1024 дескриптора.

с помощью выполнения команды ulimit -n 16384
в init-script`е этот лимит можно увеличить.

кстати, в новых версиях nginx уже есть проверка,
что RLIMIT_NOFILE не меньше чем worker_connections.

>>> При определенной посещаемости nginx перестает отдаваться. В netstat
>>> ругань на "times the listen queue of a socket overflowed".

NNN times the listen queue of a socket overflowed

новые запросы поступают быстрее, чем сервер успевает
их обрабатывать и backlog сокета переполняется.

количество Active connections можно посмотреть в nginx-status
документация: http://wiki.nginx.org/NginxHttpStubStatusModule

 >>> nginx с дебагом ругается:
 >>> 2010/02/11 14:05:52 [info] 27879#0: *53029559 recv() failed (104:
 >>> Connection reset by peer) while reading client request line, client:
 >>> 92.37.202.227, server: www.site.ru
 >>> 2010/02/11 14:05:52 [info] 27879#0: *53029559 writev() failed (32:
 >>> Broken pipe) while reading client request line

он не ругается, там уровень info. если backlog действительно большой,
то клиенты просто уставали ждать ответа от сервера и уходили с сайта.

>>> Процессы nginx'а висят примерно пополам в sleep/run.
>>> Если рядом к примеру на 81 порт запустить еще 1 nginx, он хорошо
>>> отдается.
>>> somaxconn и backlog выкручены.

for pid in $(pgrep nginx) ; do cat /proc/$pid/limits ; done | grep open

-- 
Best regards,
  Gena




Подробная информация о списке рассылки nginx-ru