Есть демон, обработка тысяч TCP IPv4 соединений, linux. Установлен на разных серверах, с одним и теми же ПО и ОС, везде выполняются одинаковые задачи. На некоторых серверах иногда зависает, другие отлично работают годами. Зависают асинхронные обработчики ASIO. Один io_service, в нем и сокеты, и сигналы. После зависания иногда перестаёт реагировать и на сигналы в рамках этого io_service, а иногда сигналы продолжает обрабатывать. GDB показывает, что все нити после зависания находятся в состоянии pthread_cond_wait (что нормально), а одна — в epoll_wait (тоже вроде нормально), на строке
int num_events = epoll_wait(epoll_fd_, events, 128, timeout);
Подскажите, есть ли способ выяснить, по какой причине перестают вызываться асинхронные обработчики — то ли перестают поступать данные от драйвера в слушаемые сокеты (проблема с драйвером?), то ли уже внутри asio что-то дальше идет не так? С аналогичной проблемой попадались несколько постов в Интернет, все были без ответа. Пробовал BOOST_ASIO_ENABLE_HANDLER_TRACKING, огромный лог, сильная нагрузка на сервер, зависание не удалось поймать.
Абсолютно непонятно, как искать причину, каким путём идти?