Я запускаю сервер Apache2, который использует демон Shibboleth (shibd) в качестве модуля федеративной аутентификации. Некоторые серверные соединения с использованием Shibboleth постоянно находятся в состоянии CLOSE_WAIT.
tcp 38 0 blah.blah:57346 shib.server.:8443 CLOSE_WAIT
tcp 38 0 blah.blah:45601 shib.server2:8443 CLOSE_WAIT
tcp 38 0 blah.blah:41737 shib.server3:5057 CLOSE_WAIT
Насколько я могу судить, CLOSE_WAIT означает, что когда удаленный сервер отключается, локальное приложение не может закрыть соединение, как должно. Я подозреваю, что в этом виноват Шибд.
Излишне говорить, что если накапливается достаточно соединений CLOSE_WAIT, у меня возникает проблема.
Попытка избавиться от соединений CLOSE_WAIT, просто используя
/etc/init.d/networking restart
не работает. На самом деле сеть, кажется, отказывается закрываться и перезапускаться, и я получаю SIOCADDRT: File exists error (т.е. сеть пытается запуститься, не остановившись заранее). Та же проблема с ifup -a
Итак, у меня есть два вопроса - один может быть легким, а другой сложнее.
К сожалению, ответ на 1 - перезапустить процесс, который все еще имеет ссылки на соединения. Больше ничего не заставит close
их.
Спустя восемь лет, семь месяцев и другая учетная запись Stack Exchange, а shibd (теперь в новой версии) все еще имеет такое поведение.
Наилучший, но совершенно неуклюжий способ решения проблемы - использовать crontab примерно раз в день для запуска.
service shibd restart
В прошлом это было головной болью, так как большие файлы метаданных означали, что перезагрузка shibd занимала много минут. Текущая версия shibd позволяет «по мере необходимости» загружать метаданные с удаленного хоста, что означает, что перезагрузка теперь менее проблематична.