使用者登入 2008 Windows 伺服器需要一分多鐘的時間。 LSM.exe 在 100MB+ 記憶體下運行

使用者登入 2008 Windows 伺服器需要一分多鐘的時間。 LSM.exe 在 100MB+ 記憶體下運行

我們有一個運行遠端桌面的 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 到 2 小時)後註銷 - 這在過去為我解決了此類問題。

答案2

也許因為您使用的是非 Windows shell,您實際上並未正確登出終端伺服器。強制斷開連線可能還不夠?

嘗試在腳本末尾新增:

 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

這看起來可能與您遇到的問題有關:

http://www.windows-now.com/blogs/kmkenney/archive/2007/05/21/workaround-for-lsm-exe-handle-and-memory-leak.aspx

雖然伺服器沒有音效卡,或許這可能涉及 RDP 的遠端音訊播放功能。

您應該嘗試在連接到終端伺服器時停用遠端音頻,並查看記憶體洩漏是否消失。


另外,您還應該採取額外的故障排除步驟:這種情況是在本機登入伺服器控制台時發生,還是僅在使用終端伺服器時發生?

答案4

在微軟論壇上找到了以下內容。

「XP/2003 終端會話管理器需要每隔幾個小時關閉一次。這會重置lsm.exe 記憶體佔用。我們使用SCOM 監視lsm.exe 記憶體使用情況,當我們關閉ts 管理員時,我們發現記憶體使用情況立即下降XP 或 2003。2008 ts 管理器似乎不會導致此問題。

http://social.technet.microsoft.com/Forums/en-US/winserverTS/thread/78b75882-870f-4a4a-8c4d-f8690c7c124a

相關內容