Я только что установил 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