質問: 存在せずにcpu使用率の急上昇を調査するにはどうすればよいですか? 深夜にcpuを大量に消費しているサーバーがありますが、負荷が高いはずがありません。これにより、一部のデータベース呼び出しがタイムアウトします。cpu使用率が50%を超えた場合にトリガーするように、perfmonでいくつかのアラートを設定しました。これは、データベースのタイムアウトと同時に発生するcpuスパイクと一致しているようです。ある種のスケジュールされたタスクだと思いますが、windowsとsql serverのスケジュールされたタスクのリストを調べましたが、何も見つかりませんでした。 windowsイベントログには、データベースのタイムアウトと、cpu使用率が急上昇したことを示すperfmonエントリのみが含まれます。私の質問はこれです:物理的に存在せずにcpuスパイクを引き起こしているプロセスを特定するにはどうすればよいですか?午前2時にサーバーにログインする必要は本当にありません。更新:問題は私が取り組んでいる製品にあったことが判明しました。問題は通常の勤務時間中に現れ始め、結局私はいくつかの卑劣なパフォーマンス調査技術に頼る必要はありませんでした。
回答: ここにいくつかのオプションがあります。最も簡単な方法は、cpu使用率が高い場合はprocess explorerです。それ以外の場合は、processmonitorでグラフを確認することをお勧めします。最も可能性の高い原因はバックアップまたは更新のいずれかであると思われるので、それらがいつスケジュールされているかを確認することをお勧めします。タスクスケジューラは、タスクが最後に実行された日時を表示します。跡形もなく process explorer 、プロセスによって消費されるcpuサイクルを確認してください。 イベントに基づく procdump cpu使用率が高いなどに基づいて、ダンプファイルを自動的に作成できます。 ダンプを持つことの利点は、開発者が実際に windbgでデバッグする ことができることです。 痕跡あり プロセスモニター 、多くの履歴を保持し、プロファイリングイベントのみをログに記録するように設定します。 [オプション]で、履歴の深さを設定し、プロファイリングイベントの生成をオンにすることができます。 次に、i/o、レジストリ、およびネットワークボタンを無効にします。 windows performance toolkit xperfがあり、高度なトレースを取得できます。 これは初めて難しいかもしれないので、最初にprocessmonitorを試してみることをお勧めします...