Назад | Перейти на главную страницу

Экземпляр Firefox на сервере удаленных рабочих столов (2012 г.) занимает до 30 ГБ ОЗУ на пользователя

Я только что установил 5 серверов Windows Server 2012 R2 Standard, на которых запущены службы удаленных рабочих столов в коллекции сеансов.

Последний сервер, который я установил, имеет 96 ГБ ОЗУ и обслуживает 80–160 пользователей. Все пользователи по большей части просто получают доступ в Интернет с помощью Firefox.

Каждый день с тех пор, как я надену это, у меня было от одного до трех пользовательских экземпляров firefox, которые увеличивали до 30 ГБ (!!!!!) памяти, потребляемой каждый день. При проверке их трафика обычно было либо:

У большинства пользователей были открыты только 1 или 2 вкладки. Похоже, что виноват Flash.

У меня Flash полностью обновлен до последней версии, а Firefox работает на последней версии. Также были сделаны все обновления ОС.

Почему это происходит / как я могу это обуздать? Я не могу, чтобы 3 пользователя использовали все ресурсы сервера.

Я составил временную «обработку» проблемы, которая вовсе не является обработкой. Я все еще ищу реальный источник проблемы.


Временное обращение

Я создал сценарий Powershell, который запускается в chron, который обнаруживает, что все экземпляры 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