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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru