У меня есть серверное приложение Windows, реализованное на C ++ с использованием Win32 API, которое выполняет много последовательных и TCP / IP-коммуникаций. Во время работы загрузка ЦП постепенно увеличивается, пока не достигнет 100%. Диспетчер задач указывает, что большая часть (> 75%) использования ЦП выполняется процессом «Система». Если я уничтожу свой серверный процесс, загрузка ЦП вернется к норме.
Есть ли "простые" способы точно диагностировать, в чем проблема?
Я подозреваю, что соединения ввода-вывода открываются и никогда не закрываются, поэтому ОС тратит все больше и больше времени на обслуживание этих запросов, но я хотел бы убедиться, что это так, прежде чем пытаться решить проблему. 1005 *
Обновление: после игры с xperf
я обнаружил, что системный процесс тратит более половины своего времени на ntoskrnl.exe!KxWaitForSpinLockAndAcquire
. Я ничего об этом не знаю, но название функции подсказывает мне, что может возникнуть проблема тупика / конфликта.
Другие функции, которые часто использует Система, включают NETIO.SYS!FilterMatchEnum
, NETIO.SYS!MatchConditionOverlap
, NETIO.SYS!IsFilterVisible
и MpNWMon.sys!NetFlowUpendByCompletionHandle
.