A instância do Firefox no Servidor de Área de Trabalho Remota (2012) leva até 30 GB de RAM / usuário

2

Acabei de configurar 5 servidores do Windows Server 2012 R2 Standard que executam Serviços de Área de Trabalho Remota em uma Coleta de Sessões.

O servidor mais recente que eu uso tem 96GB de RAM e hospeda 80 - 160 usuários. Todos os usuários estão simplesmente acessando a Web com o Firefox em sua maior parte.

Todos os dias, desde a instalação, tive de um a três usuários do balão firefox até um máximo de 30 GB (!!!!!) de memória consumida por dia. Ao inspecionar seu tráfego, geralmente era:

  • YouTube
  • Transmissão de músicas
  • Qualquer conteúdo em flash

A maioria dos usuários tinha apenas 1 ou 2 guias abertas. Parece que o Flash é o culpado.

Eu tenho o Flash totalmente atualizado para a versão mais recente e o Firefox está sendo executado na versão mais recente. Todas as atualizações do sistema operacional também foram realizadas.

Por que isso está acontecendo / como posso restringir isso? Eu não posso ter 3 usuários ocupando todos os recursos do servidor.

    
por dthree 16.01.2016 / 18:39

1 resposta

1

Eu coloquei um "tratamento" temporário para o problema que não é de forma alguma. Eu ainda estou absolutamente procurando a fonte real do problema.

Manipulação temporária

Eu criei um script Powershell que é executado em chron, que encontra todas as instâncias do firefox executando quantidades excessivas de memória, envia mensagens ao usuário e depois mata o processo.

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 }
}

Para invocar:

.\kill.ps1 ts1 ts2 ts3 ts4 ts5
    
por 16.01.2016 / 20:56