Назад | Перейти на главную страницу

nginx / node.js сбросил соединения при высокой нагрузке

Ubuntu 11.04, node.js 0.6.16, nginx 1.0.8

Я начал отладку следующей ошибки, которую мы довольно часто регистрировали из внешнего интерфейса при большой нагрузке (~ 3500 пользователей активно долго опрашивают / делают вызовы api):

parsererror:Error: jQuery171045845469435053_1347386706235 was not called",

Все вызовы, вызывающие эту ошибку, представляют собой длинные опросы, проходящие через прокси-сервер nginx на сервер node.js.

Пока это происходит, я вижу, что в следующих местах сервера появляются следующие ошибки:

В /var/log/syslog Каждые несколько минут я вижу такие всплески:

[6356088.813219] TCP: Possible SYN flooding on port 8894. Sending cookies.

В nginx error.log, Я вижу несколько более частые всплески следующих двух ошибок:

2012/09/11 18:13:05 [error] 25104#0: *1229679431 upstream timed out (110: Connection timed out) while connecting to upstream,

и

2012/09/11 18:10:38 [error] 25103#0: *1229382210 recv() failed (104: Connection reset by peer) while reading response header from upstream, 

================================

Я настроил (среди прочего) следующие параметры системы за последние несколько месяцев, пока наш трафик неуклонно рос:

  1. устанавливать ulimit очень высокий (я думаю, 16000) для пользователя, запускающего процессы
  2. установить nginx worker_connections до 16024
  3. установить sysctl net.ipv4.tcp_max_syn_backlog и net.core.somaxconn до 4096

=================================

Похоже, это говорит о том, что сервер node.js некорректно закрывает соединения или принудительно закрывает их системой. Как я могу проверить свою гипотезу?