リモート デスクトップを実行している 64 ビット Windows Server 2008 があります。
アプリケーション lsm.exe (ローカル セッション マネージャー) がメモリをリークしているようです。サーバーを再起動するとメモリ使用量は非常に低くなりますが、ユーザーがログインできなくなるまでメモリ使用量は増加し続けます。
サーバーにはオーディオ カードがなく、AV ソフトウェアもインストールされていません。サーバーは完全にサービス パックされています。(サービス パック 2)
メモリは 8GB です。60 人のユーザーが定期的に使用しています。関連するイベント ログ メッセージはないようです。ログインしてもエクスプローラーは起動しません。"login.vbs" スクリプトを起動します。このログイン スクリプトはいくつかの wsShell および wScript.Network オブジェクトを作成しますが、これらをコメント アウトしても同じ動作になります。(注: .vbs スクリプトを実行可能ファイルに置き換えました。違いはありません)
複数のアプリケーションがインストールされていますが、注目すべきは perfectbackup (Java ベースのバックアップ ソリューション) のみです。
メモリ リークは、リモート デスクトップにログイン/ログアウトするときに発生するようです。たとえば、ログインすると、lsm メモリ サイズが 21,180K から 21,512K に変更されます。ログアウトすると、使用量が 21,512K から 12,668K に変更されます。これは後で下がる可能性がありますが、一般的には増加傾向にあります。また、これはより速く上昇し、ログイン/ログアウトを数回行うと上昇したままになります。
何が原因でしょうか、またどうすれば修正できるでしょうか?
答え1
お使いのマシンでアクティブなセッションは、一般的にいくつありますか? ユーザーがログオフするのではなくセッションを切断すると、現在発生しているような問題が発生する可能性があります。この問題を解決するために私が目にした方法の 1 つは、短時間 (1 ~ 2 時間) の非アクティブ状態が続いた後、切断されたセッションを強制的にログアウトすることです。この方法で、過去にこの種の問題を解決しました。
答え2
おそらく、Windows 以外のシェルを使用しているため、ターミナル サーバーから適切にログアウトしていない可能性があります。強制的に切断するだけでは不十分でしょうか?
スクリプトの最後に以下を追加してみてください:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}\\.\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("SELECT * FROM Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Win32Shutdown(4)
Next
単なる推測です(そして、はい、4は強制ログオフです(http://msdn.microsoft.com/en-us/library/aa394058%28VS.85%29.aspx)
答え3
これは、発生している問題に関連している可能性があります:
サーバーにはオーディオカードはありませんが、多分これには、RDP のリモート オーディオ再生機能が関係する可能性があります。
ターミナル サーバーに接続するときにリモート オーディオを無効にして、メモリ リークがなくなるかどうかを確認してください。
また、実行する必要がある追加のトラブルシューティング手順: これは、サーバーのコンソールにローカルでログオンしているときに発生しますか、それともターミナル サーバーを使用しているときにのみ発生しますか?
答え4
Microsoft フォーラムで次のものを見つけました。
「XP/2003 ターミナル セッション マネージャーは、数時間ごとに閉じる必要があります。これにより、lsm.exe のメモリ フットプリントがリセットされます。SCOM を使用して lsm.exe のメモリ使用量を監視していますが、XP または 2003 で ts マネージャーを閉じると、メモリ使用量がすぐに減少します。2008 ts マネージャーではこの問題は発生しないようです。」