Дано: многопоточное (~ 20 потоков) приложение C ++ под RHEL 5.3.
При тестировании под нагрузкой top показывает, что загрузка процессора колеблется в диапазоне 10-40% каждую секунду.
Проектирование в основном довольно простое - большинство потоков реализуют шаблон активного проекта: поток имеет потокобезопасную очередь, запросы из других очередей помещаются в очередь, а поток только опрашивает очередь и обрабатывает поступающие запросы. Обработанный запрос приводит к отправке нового запроса в следующий поток обработки.
Процесс имеет несколько соединений TCP / UDP, по которым данные принимаются / отправляются с высокой нагрузкой.
Я знаю, что не предоставил достаточных данных. Это довольно большое приложение, и я не очень хорошо знаком со всеми его частями. Теперь он портирован из Windows на Linux через библиотеку ACE (используется для сетевой части).
Если проблема заключается в приложении, а не во внешнем, какие технические приемы / инструменты / подходы можно использовать для обнаружения проблемы. Например, я подозреваю, что это может быть вызвано конфликтом мьютексов.