まとめ
イベントビューワーから「Windowsログ > システム」を開き、イベントID「2004」、ソース名「Resource-Exhaustion-Detector」のログを確認することで、仮想メモリの逼迫が起きていた可能性を把握できます。
ログには、当時どのプロセスが多くのメモリを消費していたかも記録されるため、初動の切り分けに有効です。
ただし、このイベントだけで根本原因を断定できるわけではないため、必要に応じてアプリケーション設定やOS側のメモリ設定も併せて確認します。
手順
- 以下のいずれかでイベントビューアーを開きます。
- Windowsキー + R → 「eventvwr」と入力 → Enter
- Windowsキー → 「イベントビューアー」と入力 → Enter
- 「Windowsログ > システム」を開きます。
- 右側の「操作」から「現在のログのフィルター」をクリックします。
- 「イベントID」に「2004」と入力し、「OK」をクリックします。
- 「Resource-Exhaustion-Detector」のイベントログが表示されるため、ログをクリックして全般の内容を確認します。
私が利用していた環境では、以下のような内容が表示されました。
Windows は仮想メモリの不足状態を診断しました。仮想メモリを多く消費したのは次のプログラムです: tomcat9.exe(20992)は 4026863616 バイトを消費し、(途中省略:他のプログラムが続く) を消費しました。
実際の利用場面
私が利用していた環境は、Oracle Cloud Infrastructure上のインスタンスで動作していました。
その環境では、ブラウザでの操作の読み込みが遅くなっており、原因調査の結果、上記のような仮想メモリ不足の事象が発生していることが分かりました。
私の環境では、ログに表示された「tomcat9.exe」のメモリ使用量が大きいことに気づき、TomcatのJVM設定で最大ヒープサイズを確認したところ、見直し余地がありました。
このイベントだけで原因を断定はできませんが、設定確認のきっかけとして有用でした。
参考情報
https://jpwinsup.github.io/blog/2022/12/09/Performance/SystemResource/ResourceExhaustionDetector2004/
https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/performance/troubleshoot-application-service-memory-leaks