Настройка tcp_keepalive_time для утечки Node.js
В настоящее время у меня утечка сокетов с моим приложением Node.js. Эта ошибка также размещена здесь. Я надеюсь исправить это в ближайшее время. CLOSE_WAIT и FIN_WAIT2 кажутся основной проблемой.
Connections: 1662
ESTABLISHED: 238
CLOSE_WAIT: 770
FIN_WAIT1: 4
FIN_WAIT2: 632
Следующие данные извлекаются путем ввода (например, альтернативы) этого:
netstat -anp | grep ${node_pid} | wc -l
Я читал, что вы можете решить эту проблему, настроив эти переменные:
net.ipv4.tcp_fin_timeout ( = 60 )
net.ipv4.tcp_keepalive_time ( = 7200 )
Хотя мой tcp_fin_timeout установлен на 60 секунд, мои сокеты остаются там более 60 секунд. Вот почему я думаю, что я должен настроить tcp_keepalive_time
,
Он размещен на сервере Linux Centos 5, на котором также работают Apache и MySQL.
Могу ли я легко уменьшить tcp_keepalive_time
что-то вроде 1800, или это будет иметь негативное влияние на Apache, например?
1 ответ
Есть несколько опций, которые вы можете настроить для экономии ресурсов сервера, связанных с подключением. Смотрите эту страницу для пары опций и их описание. Также, посмотрите список ссылок в конце этой страницы:
man 7 ip
man 7 tcp
http://www.faqs.org/docs/securing/chap6sec70.html
http://man7.org/linux/man-pages/man7/ip.7.html
http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html
Вы можете уменьшить значение tcp_fin_timeout до 20, так как это решает проблему, возникающую в конце срока действия / требования соединения. То же самое для tcp_keepalive_time, если вы снизите его до разумного значения и не слишком низкого (скажем, 600, когда используется с tcp_keepalive_intvl и tcp_keepalive_probes).
На вашем сервере Apache не должно быть никаких негативных последствий, поскольку типичный веб-HTTP-трафик очень бурный и недолговечный. Если пользователь не загружает большой файл по ссылке с очень большой потерей пакетов, в этом случае доступ к вашему сайту будет наименьшим беспокойством.
Если вы просто читаете справочные страницы и ссылки, это должно стать симпатичным (любая путаница, очевидно, оставьте здесь вопрос!).