В логах контейнеров, на первый взгляд, не было ничего “криминального”, без явных сообщений о таймаутах и ошибок или каких-то обрывов связи. Поэтому мы двинулись дальше, распутывая взаимодействие всех компонентов системы. В этом помогали strace и tcpdump. С их помощью мы обнаружили единственную улику: при обращении к сокет-серверу коннекты нередко доходили до него со статусом Connection Refused. Попытка его дебага strace не показала каких-либо подвисаний, в ядро процессора сокет-сервер не упирался, то есть мощности ЦП вполне хватало.
Почему на других объектах не было такой проблемы, на этом нагрузка оказалась значительно больше?
Странно, что сбой сетевого подключения (в связи с лимитом на файловые дескрипторы) не давал выраженной ошибки в логи, за исключением визуального эффекта?
Да, всё верно, на этом объекте нагрузка была выше, заказчик обозначил это на первом же созвоне.
По поводу второго вопроса: дело не в лимите на файловые дескрипторы, об этом нигде не шла речь. Недостаток воркеров был проблемой. В итоге копилась огромная очередь, а воркер не успевал обрабатывать запросы.
Ну и ещё одна предпосылка возникновения проблемы — отсутствие постоянного подробного мониторинга, о необходимости которого мы говорим все 15 лет существования нашей компании :-)