Приложение C ++ на базе Windows со временем потребляет больше ресурсов процессора

У нас есть многопоточное приложение на основе C ++ в Windows, которое в реальном времени перехватывает сетевые пакеты с использованием библиотеки WinPCAP, а затем обрабатывает эти пакеты для мониторинга сети. Это приложение предназначено для запуска 24×7. Наше приложение легко потребляет 7-8 ГБ оперативной памяти.

Вопрос, который мы наблюдаем:
Допустим, приложение отслеживает 100 Мбит / с сетевого трафика и использует 60% ЦП. Мы наблюдали, что, когда приложение продолжает работать в течение более длительного периода времени, например дня или двух, потребление ЦП приложения возрастает до 70-80%, даже если оно все еще обрабатывает трафик 100 Мбит / с (выполняя тот же объем работы). ,

Мы попытались отладить эту проблему до уровня потоков с помощью ProcessExplorer и заметили, что потоки захвата пакетов со временем начинают потреблять больше ресурсов ЦП. Эта проблема не решается даже после перезапуска приложения. Только перезапуск машины решает проблему.

Мы наблюдали, что эта проблема легко воспроизводится в ОС Windows 2012 R2 Server во время ночных запусков. В Windows 7 проблема возникает, но в течение нескольких дней.

Есть идеи, что может быть причиной этого?

Заранее спасибо

2

Решение

Как насчет выделения памяти? Поскольку вы используете много памяти, это может быть проблемой с фрагментацией памяти, поэтому, если вы делаете несколько распределений / перераспределений буферов, это, конечно, приведет к значительным затратам для процессора на поиск и распределение доступного пространства.

2

Другие решения

Я наконец нашел причину вышеупомянутого поведения: это был код winpcap, который вызывал это. После замены мы не наблюдали такого поведения.

0

По вопросам рекламы [email protected]