Re: Fedora 19 не тянет

Maxim Dounin mdounin at mdounin.ru
Thu Sep 19 10:58:43 UTC 2013


Hello!

On Wed, Sep 18, 2013 at 04:10:04PM -0700, Konstantin Svist wrote:

> Пытаюсь перейти с Fedora 14 (2.6.35.14-97.fc14.x86_64) на Fedora 19
> (3.10.11-200.fc19.x86_64)
> 
> worker_processes  40;
> events {
>     worker_connections  8000;

[...]

> Симптомы:
> 
> * ab -n1000000 -c1000 'http://localhost/service_check_nginx' 
> (параллельно 4 раза, т.е. 4000 одновременных соединений)
> говорит что некоторые запросы занимают >3сек
> 
> * netstat -s:
> ...
> 1269313 times the listen queue of a socket overflowed
> 1282868 SYNs to LISTEN sockets dropped
> ...
> 
> Растёт со скоростью примерно 2000/сек, иногда больше

Listen queue при этом какого размера?

> * CPU загрузка не одинакова по workers:
> 
>   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
> 27671 nobody    20   0  418.6m 149.2m   1.1m S  51.1  0.1   0:00.77 nginx: worker process
> 27685 nobody    20   0  418.6m 149.2m   1.1m S  39.7  0.1   0:01.76 nginx: worker process
> 27661 nobody    20   0  418.6m 149.2m   1.1m S  22.7  0.1   0:01.63 nginx: worker process
> 27688 nobody    20   0  418.6m 149.2m   1.2m S  22.7  0.1   0:01.90 nginx: worker process
> 27697 nobody    20   0  418.6m 149.2m   1.1m S  17.0  0.1   0:00.95 nginx: worker process
> 27666 nobody    20   0  422.0m 152.3m   1.1m R   7.6  0.1   0:01.50 nginx: worker process
> 27701 nobody    20   0  419.3m 149.7m   1.1m S   1.9  0.1   0:00.01 nginx: worker process
> 27650 nobody    20   0  418.6m 149.9m   1.8m S   0.0  0.1   0:03.52 nginx: worker process
> 27658 nobody    20   0  418.6m 149.2m   1.1m S   0.0  0.1   0:01.30 nginx: worker process
> 27664 nobody    20   0  419.0m 149.5m   1.1m S   0.0  0.1   0:01.86 nginx: worker process
> 27669 nobody    20   0  418.6m 149.2m   1.1m S   0.0  0.1   0:00.35 nginx: worker process
> 27672 nobody    20   0  418.6m 149.2m   1.1m S   0.0  0.1   0:00.23 nginx: worker process
>
>
> а на F14:
> 
>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
> 30042 nobody    20   0 1224m 955m  17m R 41.2  0.4 523:24.45 nginx: worker process
> 30038 nobody    20   0 1224m 955m  17m S 39.4  0.4 522:24.30 nginx: worker process
> 30047 nobody    20   0 1224m 955m  17m R 39.4  0.4 520:35.36 nginx: worker process
> 30053 nobody    20   0 1224m 955m  17m R 39.4  0.4 520:42.77 nginx: worker process
> 30027 nobody    20   0 1224m 955m  17m S 37.6  0.4 520:55.20 nginx: worker process
> 30036 nobody    20   0 1224m 955m  18m R 37.6  0.4 525:26.07 nginx: worker process
> 30037 nobody    20   0 1224m 955m  17m S 37.6  0.4 523:59.09 nginx: worker process
> 30041 nobody    20   0 1224m 955m  17m R 37.6  0.4 529:31.88 nginx: worker process
> 30049 nobody    20   0 1224m 954m  17m R 37.6  0.4 519:58.73 nginx: worker process

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

При этом судя по цифрам F19, nginx - недогружен, так что listen 
queue overflows - возможно, являются просто следствие неверно 
выбранного для подобных тестов размера listen queue.  Могут, 
впрочем, быть и другие причины, но для начала имеет смысл 
исключить тривиальные.

> Кстати, если ставлю worker_connections 800 (worker_processes 40) 
> и запускаю "ab -c1000 ..." -- то ab отваливается с ошибкой (на 
> F19).
> 
> Где же дальше копать?

Копать в сторону лучшего понимания того, как используется accept() 
в nginx'е, что такое accept_mutex и зачем он нужен, а также всяких 
ручек про multi_accept и listen ... backlog=N в nginx'е и 
соответствующих ручек в ядре и утилит для их контроля 
(net.core.somaxconn и ss -nlt на линуксе).

Простейшая рекомендация для тестов с дешёвыми запросами - 
accept_mutex off, и поставить размер listen queue таким, чтобы 
туда помещалось столько запросов, сколько система должна 
обслуживать в секунду.  Но следует иметь ввиду, что это 
рекомендация именно для тестов, особенно в части accept_mutex off.

-- 
Maxim Dounin
http://nginx.org/en/donation.html



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