ab -c 45 -n 1000000 http://domain.ru/
Вот такая радость в логах Nginx 0.7.65:
2010/12/05 21:54:14 [crit] 21537#0: *14117 connect() to 127.0.0.1:11211 failed (99: Cannot assign requested address) while connecting to upstream, client: xx.xx.xx.xx server: domain.ru, request: "POST /test.php HTTP/1.1", subrequest: "/test.php", upstream: "memcached://127.0.0.1:11211", host: "domain.ru"
Как симптом море TIME_WAIT ов:
netstat -an |grep TIME_WAIT | grep 11211 | wc -l
24203
Фиксить нужно так:
Нужно увеличить число исходящих портов. Как это сделать в Линуксе - не знаю.
--
Игорь Сысоев
Но проблема в том, что пул этих адресов итак огромен:
sysctl -a|grep range
net.ipv4.ip_local_port_range = 32768 61000
Далее идет вот такое обсуждение перенастройки на 1024-65535:
now my benchmark test works fine. are there any other problems
when i run debian with this large port range?
No, there should no be problems.
You may set 1024-65535.
Есть еще вариант:
sysctl -a | grep recycl
net.ipv4.tcp_tw_recycle = 0
sysctl -a | grep reuse
net.ipv4.tcp_tw_reuse = 0
Итого, резюмируя, лично я делаю так (18000 потому, что с 21 по 17900 у меня висят различные демоны):
echo "net.ipv4.ip_local_port_range = 18000 61000" >> /etc/sysctl.conf
sysctl -p
И не забываем перезаупстить Nginx:
/etc/init.d/nginx restart
Итого, мы где-то на 15 000 портов расширили интервал исходящих портов и ошибка должна исчезнуть.
Источник: вот и вот
а зачем nginx перезапускать?
ReplyDeleteи что думаете о
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_tw_reuse
много где предупреждают что опасно включать