web-dev-qa-db-ja.com

特定のプロセス/システム全体の速度を低下させるボトルネックを見つけるにはどうすればよいですか?

特定の実行中のプロセスが与えられた場合、現在その操作のボトルネックになっているハードウェア要素を見つける方法はありますか?言い換えると、現在の計算はCPUバウンド、GPUバウンド、メモリバウンド、IOバウンドなどですか?

Windows XPで機能する回答が望ましいですが、すべての回答を歓迎します。

編集:システムリソースの大部分を自分自身に奪うプロセスについて考えています。したがって、システム全体の現在のバトルネックを見つけるのに役立つソリューション(たとえば、他の要素が休んでいる間にどの要素が最も懸命に働いているか)も問題ありません。

編集2:誰かが私にこの質問をしました、そして私の答えは

タスクマネージャーを開き、アプリケーションのページフォールトを表示することを選択します。非常に多くの場合、十分な物理メモリがないことを示しています。 CPU使用率を確認してください。常に100%である場合は、このリアルタイムアプリケーションには十分な速度ではない可能性があることを示しています。

それは私がやったであろうことですが、それは少しアマチュアっぽい感じがするので、私は犯罪者を特定するためのより正確で完全な方法を探しています。

7
Oak

Microsoft XPERFツールを使用して、スタックを歩き、ボトルネックを見つけることができます。結果はVista/7(またはサーバー2008)でのみ表示できますが、プロファイルツールはXPで実行できます。 Pigs Can Fly XPERFを使用したスタックウォーキングに関する非常に優れた記事がいくつかあります。

これを使用して起動速度のボトルネックを見つけ、最終的に、起動時にディスクIOを大量に消費していたいくつかのツールを削除するように会社に示す証拠がありました。

1
Brian

プロファイラーを使用する必要があります。おそらく、プログラムのソースコード、または少なくともデバッグシンボルへのアクセスも必要になります。

0
Billy ONeal