Отладка Boost::Asio
От: prrt  
Дата: 05.12.19 22:37
Оценка:
Есть демон, обработка тысяч 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, огромный лог, сильная нагрузка на сервер, зависание не удалось поймать.

Абсолютно непонятно, как искать причину, каким путём идти?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.