Como encontro a causa de uma enorme diferença no desempenho entre dois servidores Ubuntu idênticos?

9

Estou executando dois servidores Dell R410 no mesmo rack de um data center (atrás de um balanceador de carga). Ambos têm a mesma configuração de hardware, executam o Ubuntu 10.4, têm os mesmos pacotes instalados e executam os mesmos servidores da Web Java (nenhum outro carregamento) e eu vejo uma diferença substancial de desempenho entre os dois.

A diferença de desempenho é mais óbvia nos tempos médios de resposta de ambos os servidores (medidos no próprio aplicativo Java, sem latências de rede): um deles é 20-30% mais rápido que o outro, muito consistentemente.
Eu usei dstat para descobrir, se houver mais opções de contexto, IO, troca ou qualquer coisa, mas não vejo razão para a diferença. Com a mesma carga de trabalho (sem troca, praticamente sem I / O), o uso e a carga da CPU são maiores em um servidor.

Portanto, a diferença parece ser principalmente ligada à CPU, mas enquanto um simples benchmark da CPU usando sysbench (com todas as outras cargas desligadas) gerou uma diferença, foi apenas 6%. Então, talvez não seja apenas CPU, mas também desempenho de memória.

Até agora, verifiquei:

  • Revisões de firmware em todos os componentes (idênticas)
  • Configurações da BIOS (fiz um dump usando dmidecode e isso não mostrou diferenças)
  • Eu comparei /proc/cpuinfo , sem diferença.
  • Eu comparei a saída de cpufreq-info , sem diferença.
  • Parâmetros Java / JVM (mesma versão e parâmetros nos dois sistemas)

Além disso, substituí completamente a RAM alguns meses atrás, sem nenhum efeito.

Estou perdido. O que posso fazer para descobrir o que está acontecendo?

UPDATE : Yay! Ambos os servidores funcionam igualmente agora. Foram as configurações de "power CRAP" como jim_m_somewhere nomeou-os nos comentários. As opções do BIOS para "Gerenciamento de energia" estavam em "Desempenho máximo" no servidor rápido e em "Active Power Controller" (configuração padrão da Dell) no outro. Obviamente eu esqueci, que fiz essa configuração há dois anos, e não fiz isso em todos os servidores. Obrigado a todos por sua contribuição muito útil!

    
por the.duckman 04.12.2012 / 17:57

5 respostas

6

Duas ideias, dependendo de até onde você quer ir com isso:

  1. Troque os discos de ambos os servidores e veja se o desempenho de velocidade permanece no hardware ou se move com o software.

  2. Compare a saída de /opt/dell/toolkit/bin/syscfg -o complete-bios-config.out se você puder de alguma forma enganar este pacote para instalar.

por 07.12.2012 / 00:48
3

Mais possibilidades para produzir e diferenciar:

  • sysctl -a (certifique-se de que os tuneables do kernel são os mesmos)
  • cat / proc / interrupts (Talvez haja algum outro hardware bagunçando?)
  • lista de sensores ipmitool (long shot, mas verifique se há diferenças mais baixas, superaquecimento, problemas de tensão, etc.)
por 07.12.2012 / 18:27
3

Isso soa como um balanceador de carga relacionado a mim. Quando você diz "mesma carga de trabalho", como você está medindo isso?
Você está avaliando diretamente cada servidor aplicando uma carga de teste isoladamente?
ou Você está aplicando alguma carga ao balanceador de carga e observando os resultados nos dois servidores?

Se você estiver fazendo o último (medindo a carga colocada nos dois servidores através do balanceador de carga), seu balanceador de carga pode não dividir a carga de trabalho exatamente entre os servidores (um desvio de 20% para um par de servidores não é incomum dependendo de como o balanceador de carga decide quem recebe quais solicitações), o que está fazendo com que um servidor receba mais carga e, portanto, tenha um desempenho ruim.

(Se você estiver avaliando diretamente cada servidor, isoladamente, sem usar o balanceador de carga como intermediário, e verificar que cada componente é idêntico (até as revisões do fabricante) entre os dois sistemas, então estou em um perda - não consigo pensar em nenhuma outra razão mensurável para esse tipo de diferença de desempenho entre servidores idênticos do que os outros)

    
por 07.12.2012 / 20:24
3

Experimente algumas ferramentas de criação de perfil, seja o perfil do sistema como o perf ou o perfil do Java como VisualVM .

Com o perf você pode criar o perfil do processo Java em execução pelo PID ou criar um perfil de referência. Olhe para ambos os sistemas, veja onde o sistema lento está gastando seu tempo.

apt-get install linux-tools-common linux-tools

Então, algo como:

perf record -e cpu-cycles -p <pid>

ou

perf record -a -g <benchmark command>

então

perf report

Algumas ideias de como os sistemas podem ter um desempenho diferente:

Ambiente: A temperatura do ar ou o fluxo de ar são diferentes? Eles estão em prateleiras? Eu vi sistemas executar de forma diferente em diferentes posições de rack, causada por vibração. Existem diferentes níveis de vibração em cada rack. É improvável, considerando que você disse que quase não há E / S sendo usado. Mas eu tenho visto discos desacelerar para gravações sequenciais de 2MB / seg devido à vibração em partes de um rack.

Falhas de hardware: qualquer hardware pode estar com defeito. Use o perfil para ver o que é lento. Poderia ser um processador ou chipset ruim, um dissipador de calor não conectado corretamente, ventiladores fora de equilíbrio causando vibração, ventiladores com falha e até mesmo uma PSU ruim. Tente trocar coisas fáceis de trocar.

    
por 08.12.2012 / 05:11
1

Por que ninguém sugeriu 'sysprof' ...?

É para isso que foi projetado.

Ou ummm segundo pensamento ... tente preencher alguns limites em /etc/security/limits.conf

Tente os dois.

Se você não receber nada .... você tem um problema de segurança mais provável ou um defeito físico.

veja também: Meu servidor linux " Número de processos criados "e" Interruptores de contexto "estão crescendo incrivelmente rápido

    
por 07.12.2012 / 21:28