用户需要一分钟多的时间才能登录 2008 Windows 服务器。LSM.exe 运行在 100MB 以上的内存上

用户需要一分钟多的时间才能登录 2008 Windows 服务器。LSM.exe 运行在 100MB 以上的内存上

我们有一个运行远程桌面的 64 位 Windows Server 2008。

应用程序 lsm.exe(本地会话管理器)似乎正在泄漏内存。尽管服务器重新启动时内存使用率很低,但内存使用率会持续上升,直到人们无法再登录。

服务器没有音频卡,也没有安装任何 AV 软件。服务器已完全安装服务包。(Service pack 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 内存使用情况,当我们关闭 XP 或 2003 上的 ts 管理器时,我们看到内存使用量立即下降。2008 ts 管理器似乎不会导致此问题。”

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

相关内容