我刚刚在会话集合中设置了 5 台运行远程桌面服务的 Windows Server 2012 R2 标准服务器。
我安装的最新服务器有 96GB 内存,可容纳 80 - 160 位用户。大多数情况下,所有用户都使用 Firefox 访问网络。
自从安装这个以来,每天我都会有一到三个用户的 Firefox 实例内存消耗激增,每天最多消耗 30GB(!!!!!)。在检查他们的流量时,通常是:
- YouTube
- 音乐流媒体
- 任何 Flash 内容
大多数用户只打开了 1 或 2 个标签。看来 Flash 是罪魁祸首。
我已将 Flash 完全更新至最新版本,Firefox 也运行在最新版本。所有操作系统也已更新。
为什么会发生这种情况/我该如何遏制这种情况?我不能让 3 个用户占用所有服务器资源。
答案1
我为这个根本不是处理的问题制定了一个临时的“处理方案”。我仍然在绝对地寻找问题的真正根源。
临时处理
我编写了一个在 chron 上运行的 Powershell 脚本,它可以查找所有占用过多内存的 Firefox 实例,向用户发送消息,然后终止该进程。
foreach ($comp in $args) {
$size = 4000000000
$owners = Get-WmiObject -ComputerName $comp -Query "Select * from Win32_Process where WorkingSetSize > $size and name = 'firefox.exe'" | Select @{Label='Owner';Expression={$_.GetOwner().User}}
foreach ($i in $owners) {
$is = $i.Owner
$msg = 'AUTOMATED MESSAGE: Your web browser was using an excessive amount of memory and has been closed to prevent it from overloading the server. You can open it again right after this.'
$cmd = "msg.exe $is /SERVER:$comp '$msg' "
Invoke-Expression $cmd
}
Invoke-Command -ComputerName $comp {Get-Process | Where {($_.Name -eq "firefox") -and ($_.WorkingSet64 -gt 4000000000)} | Stop-Process -Force }
}
调用:
.\kill.ps1 ts1 ts2 ts3 ts4 ts5