LINUX.ORG.RU
ФорумAdmin

Nginx upstream + SYN_SENT висят подключения в очереди.

 , ,


0

3

Здравствуйте,

1.Есть VPS (4 ядра, 100м/б канал) на нем установлен nginx который перенаправляет трафик на 2 апстрима. Каждый из апстримов имеет по 16 ядер и 100 мб канал на которых крутится приложение на NodeJS.

2. На эти сервера идет от 1500 до 2500 запросов в секунду в сумме. Проблема заключается в том что при проверке netstat по SYN_SENT (если я не ошибаюсь это отправленый клиентом запрос на установление соеденения которое ожидает от сервера ответа) может висеть от 100 до 1000 syn_sent, мне надо что бы их небыло вообще. Возможно не хватает мощности, т.к. LA обычно на 16-ядреных от 11 до 16 бывает, постоянно держиться минимум 11. Возможно что то надо сделать на сервере nginx.

Параметры в конфиге nginx: worker_rlimit_nofile 64000; worker_connections 64000; ulimit на всех серверах увеличен до 640000

Конфиг sysctl на 16-ядерных апстримах.

net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 0 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 kernel.msgmnb = 100000 kernel.msgmax = 100000 fs.file-max = 2097152 net.core.rmem_default = 1048576 net.core.rmem_max = 16777216 net.core.wmem_default = 1048576 net.core.wmem_max = 16777216 net.core.optmem_max = 25165824 net.core.somaxconn = 65536 net.core.netdev_max_backlog = 65536 net.ipv4.tcp_moderate_rcvbuf = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_congestion_control = bic net.ipv4.tcp_ecn = 0 net.ipv4.tcp_max_syn_backlog = 100000 net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_max_tw_buckets = 2000000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_mem = 65536 131072 262144 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 8192 65536 16777216 vm.max_map_count = 262144 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.unix.max_dgram_qlen = 100 net.ipv4.ip_nonlocal_bind = 1 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syn_retries = 2 vm.min_free_kbytes = 65536

Посоветуйте пожалуйтса что можно еще испрвавить. Я думаю что возможно ядра не успевают обрабатывать все и из-за этого висят подключения. Но в момент когда ядра не полностью забиты всеравно есть подключения которые ожидают ответ.

Если надо больше информации я ее предоставлю. Спасибо.

смотреть dmesg на предмет ошибок сетевого стека на апстримах и на фронтенде. Если апстрим не ответил на syn_sent, значит у него чего-то не хватает для ответа или до него эти пакеты не дошли.

прочитай про LORCODE

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.