Нет ответа от сервера c nginx на некоторые syn?
Добрый день.
Столкнулся со следующей ситуацией.
Есть сервер с Debian Squeeze, на нём установлен nginx 0.7.67 (из репозитория).
В принципе, всё работает без проблем, но заметили, что иногда не получается приконнектиться к порту. SYN приходит, ответа нет.
Пробовал включить syncookies, это несколько помогло (в логах вылезли ошибки про «possible SYN flooding on port 80. Sending cookies.»). Но всё равно были проблемы с коннектом. Синфлуда при этом нет, это просто много легального трафика.
После этого, увеличил следующие параметры:
net.core.somaxconn = 128000 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_max_syn_backlog = 128000'
У нжинкса увеличил listen backlog до 65536.
Сообщения про «possible SYN flooding» исчезли, однако всё равно периодически не приконнектится к серверу. Проверял простеньким скриптом, который поднимает 20 тредов и открывает и закрывает сокеты к 80-му порту в каждом треде.
Из 1000 попыток открыть сокет около 30-50 отваливаются по таймауту (2 секунды), остальные при этом коннектятся практически мгновенно.
При всём этом в dmesg пусто, в error.log нжинкса тоже пусто.
Кусок конфига нжинкса:
user www-data; worker_processes 2; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 65535; use epoll; } server { listen 80 default backlog=65536;… }
На сервере 2 ядра, LoadAverage держится меньше единицы.
В netstat'e примерно такая картина:
# netstat -ant | grep tcp | tr -s ' ' ' ' | awk '{print $6}' | sort | uniq -c 22 CLOSING 3729 ESTABLISHED 815 FIN_WAIT1 3807 FIN_WAIT2 138 LAST_ACK 5 LISTEN 167 SYN_RECV 37 SYN_SENT 1104 TIME_WAIT
В stub_status'e нжинкса:
Active connections: 5985 server accepts handled requests 35200 35200 34437 Reading: 341 Writing: 223 Waiting: 5421
На всякий случай — SYNы до сервера точно доходят, снимал tcpdump, в нём они видны.
Подскажите, пожалуйста, что смотреть, куда копать, кто сталкивался?
Столкнулся со следующей ситуацией.
Есть сервер с Debian Squeeze, на нём установлен nginx 0.7.67 (из репозитория).
В принципе, всё работает без проблем, но заметили, что иногда не получается приконнектиться к порту. SYN приходит, ответа нет.
Пробовал включить syncookies, это несколько помогло (в логах вылезли ошибки про «possible SYN flooding on port 80. Sending cookies.»). Но всё равно были проблемы с коннектом. Синфлуда при этом нет, это просто много легального трафика.
После этого, увеличил следующие параметры:
net.core.somaxconn = 128000 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_max_syn_backlog = 128000'
У нжинкса увеличил listen backlog до 65536.
Сообщения про «possible SYN flooding» исчезли, однако всё равно периодически не приконнектится к серверу. Проверял простеньким скриптом, который поднимает 20 тредов и открывает и закрывает сокеты к 80-му порту в каждом треде.
Из 1000 попыток открыть сокет около 30-50 отваливаются по таймауту (2 секунды), остальные при этом коннектятся практически мгновенно.
При всём этом в dmesg пусто, в error.log нжинкса тоже пусто.
Кусок конфига нжинкса:
user www-data; worker_processes 2; worker_rlimit_nofile 65535; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 65535; use epoll; } server { listen 80 default backlog=65536;… }
На сервере 2 ядра, LoadAverage держится меньше единицы.
В netstat'e примерно такая картина:
# netstat -ant | grep tcp | tr -s ' ' ' ' | awk '{print $6}' | sort | uniq -c 22 CLOSING 3729 ESTABLISHED 815 FIN_WAIT1 3807 FIN_WAIT2 138 LAST_ACK 5 LISTEN 167 SYN_RECV 37 SYN_SENT 1104 TIME_WAIT
В stub_status'e нжинкса:
Active connections: 5985 server accepts handled requests 35200 35200 34437 Reading: 341 Writing: 223 Waiting: 5421
На всякий случай — SYNы до сервера точно доходят, снимал tcpdump, в нём они видны.
Подскажите, пожалуйста, что смотреть, куда копать, кто сталкивался?
Похожие публикации
Не пускают на собственные сайты
Как защититься от хулигана?
помогите советом нубу
Вопрос по нагрузке форума phpBB на хостинг(на ядро cpu) ?
CMS DLE и хостинг sWeb.ru
Нет комментариев