最近、ライブサーバーでWebアプリが応答しなくなる問題が発生しました。私たちが得ていたのは、サーバーを再起動するまでの503エラーだけで、それで問題ありませんでした。最終的には、それをhttperr.logまでたどると、1_Connections_Refusedエラーがたくさん見つかりました。
さらなる調査により、非ページプールの制限に達したことが示されているようです。それ以来、Poolmon.exeを使用して非ページプールメモリを監視しており、問題の原因となっているタグを特定したと考えています。
Tag Type Allocs Frees Diff Bytes Per Alloc
Even Nonp 51,231,806 50,633,533 684,922 32,878,688 48
poolmon.exe / gを使用すると、マップされたドライバーが[<不明>イベントオブジェクト]として表示されます。
これはほとんど役に立ちません。私のチームはこの問題の調査にかなりの時間を費やしており、これを特定のアプリケーションまたはサービスに絞り込むためのプロセスを見つけることができませんでした。ほとんどの人は、ページングされていないメモリがリセットされるまで、マシン上のプロセスを強制終了することで問題を解決しているようです。これは、実稼働マシンで作業するときに見たいとはまったく言えません。
タスクマネージャを開いてプロセスリストを表示した場合。NPプール値が105KのMailService.exeが表示されます。これは、2番目にリストされているプロセスの値より36K高いです。過去にメールサーバーでいくつかの問題が発生したため(この問題に関連するかどうかに関係なく)、私の直感は、これが問題の原因であると感じています。
ただし、サービスを再開する前に、単なる「直感」よりも少し確信を持ってみたいと思います。
私もpoolmon.exe / cを使用してみましたが、これは常にエラーを返します:
unable to load msvcr70.dll/msvcp70.dll
そしてそれはlocaltag.txtを作成しません。どこにあるのかわからないので、同僚がpooltag.txtをインターネットからダウンロードする必要がありました。winデバッガーやwin DDKがインストールされていません(私が確認できます)。これらのいずれもインストールされていないため、上記のエラーが表示される可能性がありますが、わかりません。
最後に私は試しました:
C:\windows\system32\driver\findstr /m /l Even *.sys
これにより、かなりのサイズの.sysファイルのリストが返され、問題は解決しませんでした。
だから私の質問はこれです:このメモリリークの原因を絞り込む他の方法はありますか?
更新:
以下に提案するように、私は最終日ほどプール非ページバイトをログに記録しており、プロセスが上昇しているかどうかを確認しています。ほとんどの場合、すべてのプロセスは、その使用においてかなり静的であるように見えます。そのうちの2つは、わずかに上昇しているようです。私はこれを今後数日間監視し続けます。
また、プロセスのいずれも過度の数のハンドルを使用していないように見えることも前に言及するのを忘れていました。
更新2:
私はこれをここ数週間監視してきました。個々のプロセスの非ページバイトプールと合計非ページバイトプールは、その間比較的安定しています。この間にWindowsが更新され、サーバーが再起動したので、問題が解決したかどうか疑問に思っています。私はこれに先立っていたので、非ページバイトプールで一貫した成長が確実に見られません。