Win32APIを使用してC++で実装されたWindowsサーバーアプリケーションがあります。これは、多くのシリアルおよびTCP/IP通信を実行します。実行すると、CPU使用率は100%に達するまで徐々に増加します。タスクマネージャーは、CPU使用率のほとんど(> 75%)が「システム」プロセスによるものであることを示しています。サーバープロセスを強制終了すると、CPU使用率は通常に戻ります。
問題が何であるかを正確に診断するための「簡単な」方法はありますか?
I / O接続が開いていて、閉じられていないのではないかと思われるため、OSはこれらの要求の処理にますます多くの時間を費やしていますが、問題を解決する前に、それが当てはまるかどうかを確認したいと思います。
更新:をいじっxperf
てみたところ、システムプロセスがその時間の半分以上をに費やしていることがわかりましたntoskrnl.exe!KxWaitForSpinLockAndAcquire
。これについては何も知りませんが、関数の名前から、デッドロック/競合の問題がある可能性があります。
システムが多く使用している他の関数には、、、、、およびが含まNETIO.SYS!FilterMatchEnum
れます。NETIO.SYS!MatchConditionOverlap
NETIO.SYS!IsFilterVisible
MpNWMon.sys!NetFlowUpendByCompletionHandle