<div dir="ltr"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Добрый день.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Столкнулся со следующей ситуацией.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Есть сервер с Debian Squeeze, на нём установлен nginx 0.7.67 (из репозитория).</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">В принципе, всё работает без проблем, но заметили, что иногда не получается приконнектиться к порту. SYN приходит, ответа нет.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Пробовал включить syncookies, это несколько помогло (в логах вылезли ошибки про «possible SYN flooding on port 80. Sending cookies.»). Но всё равно были проблемы с коннектом. Синфлуда при этом нет, это просто много легального трафика.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">После этого, увеличил следующие параметры:</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12.727272033691406px;vertical-align:baseline;outline:0px;color:rgb(0,0,0);line-height:20px"><code class="" style="margin:0px;padding:1px 4px;border:1px solid rgb(225,225,232);font-size:12px;vertical-align:baseline;outline:0px;background-color:rgb(247,247,249);display:block;white-space:pre-wrap;font-family:Menlo,Monaco,'Courier New',monospace;color:rgb(34,34,34);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">net.core.somaxconn = <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">128000</span>
net.core.netdev_max_backlog = <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">10000</span>
net.ipv4.tcp_max_syn_backlog = <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">128000</span>
</code></pre><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">'</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">У нжинкса увеличил listen backlog до 65536.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Сообщения про «possible SYN flooding» исчезли, однако всё равно периодически не приконнектиться к серверу. Проверял простеньким скриптом, который поднимает 20 тредов и открывает и закрывает сокеты к 80-му порту в каждом треде.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Из 1000 попыток открыть сокет около 30-50 отваливаются по таймауту (2 секунды), остальные при этом коннектятся практически мгновенно.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">При всём этом в dmesg пусто, в error.log нжинкса тоже пусто.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Кусок конфига нжинкса:</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12.727272033691406px;vertical-align:baseline;outline:0px;color:rgb(0,0,0);line-height:20px"><code class="" style="margin:0px;padding:1px 4px;border:1px solid rgb(225,225,232);font-size:12px;vertical-align:baseline;outline:0px;background-color:rgb(247,247,249);display:block;white-space:pre-wrap;font-family:Menlo,Monaco,'Courier New',monospace;color:rgb(34,34,34);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px">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;
.....
}
</code></pre><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">На сервере 2 ядра, LoadAverage держится меньше единицы.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">В netstat'e примерно такая картина:</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12.727272033691406px;vertical-align:baseline;outline:0px;color:rgb(0,0,0);line-height:20px"><code class="" style="margin:0px;padding:1px 4px;border:1px solid rgb(225,225,232);font-size:12px;vertical-align:baseline;outline:0px;background-color:rgb(247,247,249);display:block;white-space:pre-wrap;font-family:Menlo,Monaco,'Courier New',monospace;color:rgb(34,34,34);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px"><span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(128,128,128)"># netstat -ant | grep tcp | tr -s ' ' ' ' | awk '{print $6}' | sort | uniq -c</span>
22 CLOSING
3729 ESTABLISHED
815 FIN_WAIT1
3807 FIN_WAIT2
138 LAST_ACK
5 LISTEN
167 SYN_RECV
37 SYN_SENT
1104 TIME_WAIT
</code></pre><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">В stub_status'e нжинкса:</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12.727272033691406px;vertical-align:baseline;outline:0px;color:rgb(0,0,0);line-height:20px"><code class="" style="margin:0px;padding:1px 4px;border:1px solid rgb(225,225,232);font-size:12px;vertical-align:baseline;outline:0px;background-color:rgb(247,247,249);display:block;white-space:pre-wrap;font-family:Menlo,Monaco,'Courier New',monospace;color:rgb(34,34,34);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px"><span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(0,0,0)">Active</span> connections: <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">5985</span>
server accepts handled requests
<span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">35200</span> <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">35200</span> <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">34437</span>
Reading: <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">341</span> Writing: <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">223</span> Waiting: <span class="" style="margin:0px;padding:0px;border:0px;font-size:11.818181991577148px;vertical-align:baseline;outline:0px;color:rgb(47,152,255)">5421</span>
</code></pre><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">На всякий случай — SYNы до сервера точно доходят, снимал tcpdump, в нём они видны.</span><br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">
<br style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px"><span style="color:rgb(0,0,0);font-family:Verdana,sans-serif;font-size:12.727272033691406px;line-height:20px">Подскажите, пожалуйста, что смотреть, куда копать, кто сталкивался?</span><div>
<font color="#000000" face="Verdana, sans-serif"><span style="line-height:20px">(у меня есть большие подозрения, что проблема не в самом nginx, но где-то в настройках системы, поэтому заранее прошу прощения за возможный оффтоп).<br>
</span></font><div><font color="#000000" face="Verdana, sans-serif"><span style="line-height:20px"><br></span></font></div><div><font color="#000000" face="Verdana, sans-serif"><span style="line-height:20px">P.s. Задавал этот вопрос на хабре и рассылке debian-ru, извините, если кому-то намозолил глаза. Но ответа пока не нашёл.<br>
</span></font><div><div><br></div>-- <br>Alexey Malov
</div></div></div></div>