远程桌面服务器 (2012) 上的 Firefox 实例占用每个用户高达 30GB 的 RAM

远程桌面服务器 (2012) 上的 Firefox 实例占用每个用户高达 30GB 的 RAM

我刚刚在会话集合中设置了 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

相关内容