Problemas de desempenho do IIS com arquivos simples (html, css, js)

1

Estamos executando uma VM do Windows 2012R2 com o IIS 8.5 com o objetivo de exibir arquivos simples, sem ASP.NET ou outro conteúdo dinâmico em uso. O servidor está configurado para mapear 5 sites para o mesmo IP & Filtragem de porta no FQDN e somente a exibição de arquivos HTML, JS e CSS nesses sites. Na maior parte, os arquivos são provenientes de diretórios virtuais que são mapeados para pastas locais, no entanto, estou percebendo a cada vez que os arquivos são aleatoriamente lentos para carregar. Meus testes detalhados foram no Chrome, embora eu tenha visto uma lentidão "aleatória" semelhante no Firefox e no IE.

Como por configuração, a maioria dos padrões está no lugar. Cada site tem seu próprio pool de aplicativos e todos eles têm configurações padrão, e como o ASP.NET não está instalado, as opções são bem básicas para o que está disponível. Após algumas pesquisas, eu ativei o cache de saída no modo de usuário & O modo kernel configurado para usar "notificações de alteração de arquivo" e a Compressão estava ativada por padrão para conteúdo estático e dinâmico.

A lentidão ocorre quando os sites estão sendo carregados, ~ 54 arquivos são carregados no início. Por várias razões, a maioria delas não será mesclada, mas algumas podem ser, mas de vez em quando o IIS trava na entrega de um dos arquivos. Um arquivo de 100 KB será entregue em poucos milésimos de segundos, seguido imediatamente por um arquivo de 50 KB levando mais de 9 segundos. Outras vezes, todos os arquivos serão carregados em < 10 ms. Observe que esse teste foi realizado com o cache do Chrome desativado para testes de tempo.

Em geral, eu sou um cara unix e suspeito que a resposta para meus problemas está no uso do NGINX, que eu pessoalmente acho que é mais adequado para essa tarefa, mas acredito que seja um viés pessoal e queria alcançar para ver se havia outras possibilidades que estava faltando. A maioria dos lugares que abordam problemas de desempenho com o IIS parecem centrar-se em aplicativos ASP.NET, e não na entrega de arquivos simples. Então, novamente, talvez esse seja o nosso problema, heh.

    
por aetherwalker 18.04.2016 / 21:31

2 respostas

2

Este é um servidor voltado para a Internet ou um servidor voltado para a Intranet? Eu não me importaria de dar uma olhada em mim mesmo.

Teoricamente, não deve haver nenhum motivo para o IIS demorar a fornecer conteúdo estático - todos eles são roteados por meio do manipulador de arquivos estáticos, o que é extremamente eficiente.

Algumas coisas que você pode experimentar:

Certifique-se de que os sites nunca ocorram (resultando no fechamento do processo de trabalho do IIS - cada pool de aplicativos obtém seu próprio processo binário na memória, w3wp.exe, no qual o httpd é desativado assim que a ligação é resolvida. de 10 segundos ou mais para reiniciar este processo se for desligado) - você pode fazer isso alterando a configuração de inicialização dos pools de aplicativos de "on demand" para "always on".

Altere o pool de aplicativos para "nenhum código gerenciado" - isso altera o modelo de pipeline e garante que as solicitações não sejam executadas pelo mecanismo do asp.net, de qualquer maneira.

Se o servidor nunca hospedará nenhum site asp.net, considere a possibilidade de eliminar esses recursos (removê-los). O mesmo para a compactação dinâmica - você pode remover isso se o servidor nunca executar qualquer asp.net.

Como está o disco I / O? Se o IIS estiver monitorando os arquivos para alterações e recarregando no cache, pode ser que cada soma de verificação do arquivo esteja demorando um pouco devido à baixa E / S do disco. Você está usando ESX ou HyperV para vitualizar? A maneira como o armazenamento de dados foi apresentado ao servidor (disco local vs SAN) pode afetar, um disco armazenado na rede terá E / S mais lenta. Esta é provavelmente uma última reinicialização, mas tenho certeza que a fraca E / S de disco se manifestaria em minhas outras maneiras notáveis primeiro.

Desista e despeje seu conteúdo em um bucket do S3 e, em seguida, sirva-o com uma distribuição de CDN do Cloudfront. :) Apenas diga.

    
por 09.07.2016 / 17:35
1

Eu estava solucionando o mesmo problema e parece haver algum problema no IIS 8.5 quando a compactação dinâmica e estática está ativada. O mesmo problema não aparece no IIS 10.0 (em meus testes).

Você pode aplicar uma das seguintes soluções alternativas:

  • Desative a compactação dinâmica para a pasta com os arquivos estáticos (adicione o seguinte em system.webServer in web.config ):

    <urlCompression doDynamicCompression="false" />
    
  • Desativar a verificação da frequência de ocorrências (no nível do servidor para o IIS 8.5 )

    %windir%\system32\inetsrv\appcmd.exe set config  -section:system.webServer/httpCompression /staticCompressionIgnoreHitFrequency:"True"  /commit:apphost
    
  • Ajuste a frequência de resultados, usando esta resposta .

Implemente um dos qworkarounds e você verá uma tremenda melhoria nas velocidades de resposta / download.

    
por 07.02.2018 / 18:18