скачок использования процессора процессом c ++ вызывает обнаружение - PullRequest
0 голосов
/ 18 июня 2010

Дано: многопоточное (~ 20 потоков) приложение C ++ под RHEL 5.3. При тестировании под нагрузкой top показывает, что загрузка процессора колеблется в диапазоне 10-40% каждую секунду.

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

Процесс имеет несколько соединений TCP / UDP, по которым данные принимаются / отправляются с высокой нагрузкой.

Я знаю, что не предоставил достаточных данных. Это довольно большое приложение, и я не очень хорошо знаком со всеми его частями. Теперь он портирован из Windows на Linux через библиотеку ACE (используется для сетевой части).

Если проблема заключается в приложении, а не во внешнем, какие технические приемы / инструменты / подходы можно использовать для обнаружения проблемы. Например, я подозреваю, что это может быть вызвано конфликтом мьютексов.

1 Ответ

1 голос
/ 28 июня 2010

Я столкнулся с подобной проблемой некоторое время назад, и вот шаги, которые помогли мне.1) Начните с использования strace, чтобы увидеть, где приложение тратит время на выполнение системных вызовов.

2) Используйте OProfile для профилирования как приложения, так и ядра.

3) Если вы используетесистема SMP, посмотрите на настройки numa, в моем случае это вызвало хаос./ proc / appPID / numa_maps быстро расскажет, как происходит доступ к памяти.пропуски numa могут привести к скачкам.

4) Вы упоминали о TCP-соединениях в своем приложении.Посмотрите на размер MTU и убедитесь, что он установлен на правильное значение. В зависимости от типа передаваемых данных используйте задержку Nagles соответствующим образом. Задержка Наглса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...