GD Star Rating
loading...

Репост с webdev

У меня проблема со входящими сокетами, которые подвешиваются в состоянии CLOSE_WAIT.
Вроде бы libevent должна выкидывать onFailureEvent на закрытие сокета, чтобы я смог сделать socket_close(), но она этого почему–то не делает.
Как советуют в интернетах, покрутил тайминги всякие в sysctl, но это приводит только к тому, что клиенты начинают срать в netstat сокетами в состоянии SYN_SENT, потом отваливаются — то есть демон вообще подвешивается.
Входящий сокет открыт только на одном процессе, дочерние его не подхватывают, то есть должен закрываться.
В каком направлении ещё можно покопать?

Админы и сочувствующие посетители hardblog.net посчитали злободневным: научный форум top-scientists.com

5 Responses to Репост с webdevУ

  1. Colhlam:

    В /proc/sys/net/ipv4/ надо выставить следующее:
    tcp_tw_recycle = 1
    tcp_tw_reuse =1
    tcp_syncookies = 0

  2. AmtFcuk:

    : спасибо!
    Проблема уже решилась (три дня баг искал), а я дебил.

    Но про эти параметры тоже почитаю, спасибо 🙂

  3. AmtFcuk:

    : ага, я так и думал – tcp_tw_reuse у меня заменяет SO_REUSEADDR, так что на уровне системы можно оставить нулевым.

    Причём это “safe alternative for tcp_tw_recycle”, так что recycle тоже лучше не включать – load balancing меня устраивает, не думаю, что в этом могут быть проблемы.

    Про syncookies – “Note, that syncookies is fallback facility. It MUST NOT be used to help highly loaded servers to stand against legal connection rate”. Мне же нужно выдерживать какую-никакую нагрузку именно в legal connection rate.

  4. Colhlam:

    : Полностью согласен с замечаниями, однако часто приходится сталкиваться с откровенно криво написанным софтом, который внешними изменениями только так можно заставить взлететь.

  5. AmtFcuk:

    : угу. Ну тут софт мой собственный, так что удалось решить проблему корректным путём 🙂

Добавить комментарий