Есть ли способ в Linux, чтобы проверить, сколько эфемерных портов осталось доступным? Иногда я вижу ошибки «Адрес уже используется» из-за нехватки временных портов. Перезагрузка машины решит эту проблему, но было бы лучше перехватить ее до того, как это произойдет.
17
Ответы:
Диапазон эфермального порта указан в
/proc/sys/net/ipv4/ip_local_port_range
. Вы, вероятно, можете расширить его для запуска с 16К до 64К.Вы можете увидеть количество открытых соединений, используя
netstat -an
. Сокеты могут застрять в состоянии TIME_WAIT, если вы открываете и закрываете множество соединений. В некоторых местах это неизбежно, но вам, возможно, придется подумать, нужен ли вам пул соединений, если это так.Если проблема связана с TIME_WAIT, вы можете установить
net.ipv4.tcp_tw_reuse
/,net.ipv4.tcp_tw_recycle
чтобы ускорить оборот соединения.источник
net.ipv4.tcp_tw_recycle
был удален в Linux 4.12/proc/sys/net/ipv4/ip_local_port_range
должно быть подмножество 49152-65535. Таким образом, уменьшение нижнего предела диапазона до значения меньше 49152 сопряжено с определенным риском.Имейте в виду, что этот лимит применяется для каждого уникального набора (IP-адрес источника, IP-адрес узла, порт одноранговой сети). Поэтому вам необходимо сгруппировать выходные данные
netstat
/ss
по каждому из этих кортежей и проверить, насколько близка каждая группа к пределу соединения.Этот пост объясняет, как вы можете сделать эту группировку более подробно. Чтобы проверить, насколько близка каждая группа к пределу в Ruby, вы можете обработать
ss
вывод следующим образом:источник