如何找出导致终端服务器使用所有 RAM 的原因?

如何找出导致终端服务器使用所有 RAM 的原因?

我在集群环境中有 4 个终端服务器(即 Server1、Server2、Server3、Server4)。出于某种原因,Server1 总是使用 90-100% 的可用 RAM。其他服务器平均使用大约 40% 的 RAM。每个服务器的用户总数约为 27 个会话。

我如何知道为什么一台服务器用完了所有 RAM,而另一台服务器却没有。我预计 RAM 使用率会波动,因为有些用户可能会使用更多工具和资源。然而,Server1 在工作时间一直处于高峰状态。

当我通过 RDP 进入 server1 并导航至“Windows 任务管理器 > 性能 > 资源监视器”然后转到“内存”选项卡时,我注意到一件事,我看到许多 chrome.exe 进程在 Server1 上运行。然而,在其他服务器上,尽管所有用户都使用 chrome.exe 使用系统进行日常工作,但我没有看到相同的行为。

感觉这台服务器的某个配置有点错误。据我所知,所有 4 个终端服务器都应该具有相同的设置“我没有配置它们”,所以我不能 100% 确定”

这是 Server1 的屏幕截图:资源监视器 服务器1:资源监视器 Server1:任务管理器 服务器1:任务管理器

以下是 Server2 的屏幕截图:资源监视器 Server2:资源监视器 Server2:任务管理器
服务器2:任务管理器

答案1

SERVER1 的第一个屏幕使用了 3GB 的 RAM,还有许多页面需要滚动浏览。有些东西太多了,但是什么呢?尝试使用以下 CLI 工具来总结其中一些数据。您是否有一个不良用户在做一些奇怪的事情?您是否有一个由许多用户运行的不良应用程序?

这将为您提供每个用户名的 SessionID。我仍然使用“query.exe”,不确定如何从 WMI 获取。
query user /server:SERVER1

这将为您提供每个 SessionID 启动的进程数的小计(名称列是 SessionID)。是否有一个会话的进程数明显多于其他会话?
gwmi win32_process -comp SERVER1 | select name,workingsetsize,sessionid | group-object -prop sessionid | sort -desc count

按进程名称进行小计,无论谁启动了它。您似乎有很多“InteractionClient.exe”实例。应该有那么多吗?
gwmi win32_process -comp SERVER1 | select name,workingsetsize,sessionid | group-object -prop name | sort -desc count

选定 SessionID 的 WorkingSetSize 小计。将 99 替换为来自 CMD2 的可疑 SessionID。将 InteractionClient 替换为来自 CMD3 的可疑 procNames。我本来想在按 sessionid 分组后测量对象总和,但我不知道该怎么做。
(gwmi win32_process -comp SERVER1 | where {$_.sessionid -eq 99} | measure-object workingsetsize -sum).sum/1mb (gwmi win32_process -comp SERVER1 | where {$_.name -eq "InteractionClient.exe"} | measure-object workingsetsize -sum).sum/1mb

SessionID、ExeName、WorkingSetSize 的大型表格。您可以将其传递到 Excel 中,并通过手动插入一些 =SUM(A1:A99) 语句来获取 RAM 小计。
gwmi win32_process -comp SERVER1 | select sessionid,name,workingsetsize | sort sessionid,name,workingsetsize

相关内容