Grande diferença de desempenho entre dois servidores web, comportamento estranho visto usando monitor de processo

3

Temos dois servidores Coldfusion com uma enorme diferença de desempenho executando exatamente o mesmo código nos mesmos dados de entrada. O código em questões instancia uma grande quantidade de CFCs (Componentes ColdFusion, que são semelhantes a objetos em linguagens OOP).

Eu comparei os dois servidores executando o Process Monitor e, em seguida, chamando o código problemático em ambas as máquinas. Eu aprendi duas coisas. Primeiro, o Coldfusion abre arquivos CFC toda vez que ele instancia um objeto. Ambos os servidores fazem isso, portanto, não pode ser a causa da diferença de desempenho. Segundo, o servidor rápido abre os arquivos CFC diretamente, enquanto o servidor com o problema de desempenho parece navegar pelo caminho até alcançar o arquivo CFC desejado. Ele faz isso para todos os arquivos, mesmo os que foram previamente carregados, e como o código instancia muitos CFCs, ele fica muito lento. Veja abaixo os traços parciais da Promon que mostram esse comportamento. Pode demorar mais de 60 segundos para o servidor lento fazer o que o mais rápido faz em 2 segundos.

Alguém pode me dizer o que causa esse comportamento? É um cenário do ColdFusion? Como o Coldfusion é executado sobre Java, é uma configuração Java? É uma opção de sistema operacional? O servidor rápido está executando o Windows XP e acho que o servidor lento é um Windows Server 2003.

Pergunta bônus: O Coldfusion parece não realizar nenhuma operação do READ FILE em nenhum dos arquivos CFC ou CFM. Como isso pode ser?

Exemplo do servidor rápido abrindo arquivos CFC:

11:25:14.5588975    jrun.exe    QueryOpen                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5592758    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595024    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595940    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5599628    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5601600    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5602463    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc

Amostra equivalente do servidor lento abrindo arquivos CFC:

11:15:08.1249230    jrun.exe    CreateFile                  D:\
11:15:08.1250100    jrun.exe    QueryDirectory              D:\org
11:15:08.1252852    jrun.exe    CloseFile                   D:\
11:15:08.1259670    jrun.exe    CreateFile                  D:\org
11:15:08.1260319    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1260769    jrun.exe    CloseFile                   D:\org
11:15:08.1269451    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1270613    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1271140    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1279312    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1280086    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1280789    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1291034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1291709    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1292224    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1300568    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1301321    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1301843    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1312049    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314409    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314633    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1315881    jrun.exe    CreateFile                  D:\
11:15:08.1316379    jrun.exe    QueryDirectory              D:\org
11:15:08.1316926    jrun.exe    CloseFile                   D:\
11:15:08.1330951    jrun.exe    CreateFile                  D:\org
11:15:08.1338656    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1339118    jrun.exe    CloseFile                   D:\org
11:15:08.1526468    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1527295    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1527989    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1531977    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1532589    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1533575    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1538457    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1539083    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1539553    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1544126    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1544980    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1545482    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1551034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1552878    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1553044    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc

Obrigado

    
por Francis Gagnon 23.11.2012 / 14:52

3 respostas

3

Ao longo das linhas da resposta de Adam Cameron, sugiro comparar C: \ ColdFusion8 \ lib \ neo * .xml em ambas as máquinas e trabalhar com as diferenças, particularmente neo-runtime.xml e neo-debug.xml - estes onde a configuração do ColdFusion é armazenada. Poste quaisquer diferenças interessantes aqui.

Se você não tiver uma ferramenta de comparação, use a versão de avaliação do BeyondCompare , pois ela fará diretórios inteiros e suportará bem o XML.

    
por 26.11.2012 / 09:58
7

Parece-me que você não tem "Cache de componente" marcado no CFAdmin (Configurações do servidor > Cache) no servidor lento.

Outra possibilidade é que você tenha diferentes mapeamentos de CF (Configurações do servidor > Mapeamentos) e / ou caminhos de tag personalizados (Extensões > Caminhos de tag personalizados) definidos entre os dois servidores.

É mais provável que seja o primeiro.

Você também pode definir "Cache Template In Request" (Configurações do servidor > Cache) para evitar que o arquivo procure o mesmo CFC após o primeiro para uma determinada solicitação e, se for um servidor de produção, marque "Trusted cache "(Configurações do servidor > Cache) também, o que impedirá qualquer pesquisa no sistema de arquivos se o arquivo já tiver sido carregado uma vez.

O ColdFusion também manterá apenas um número específico de arquivos compilados na memória por vez, definido por "Número máximo de modelos em cache" (Configurações do servidor > Cache), e você deve tentar definir isso para abranger o número total de Arquivos CFML (e métodos CFC, cada um deles compilado em uma classe própria) no seu aplicativo. Obviamente, isso é predicado em ter RAM suficiente disponível para a JVM para lidar com isso. Pode ser um pouco de equilíbrio.

    
por 23.11.2012 / 15:01
5

Tente verificar:

  1. Configurações da JVM especialmente configurações de memória
  2. Verifique se o modo de depuração está desativado
  3. Configurações de verificação de vírus. Veja se alguém tem arquivos Java ignorados
  4. Verifique onde cfdump está sendo usado.
por 26.11.2012 / 04:46