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 web Java (sem outra carga) e estou vendo uma diferença substancial de desempenho entre os dois.

A diferença de desempenho é mais óbvia nos tempos médios de resposta dos dois servidores (medidos no próprio aplicativo Java, sem latências de rede): um deles é 20 a 30% mais rápido que o outro, de forma muito consistente.
Eu costumava dstatdescobrir se existem mais opções de contexto, E / S, trocas ou qualquer coisa, mas não vejo razão para a diferença. Com a mesma carga de trabalho (sem troca, praticamente sem E / S), o uso e a carga da CPU são maiores em um servidor.

Portanto, a diferença parece estar principalmente ligada à CPU, mas enquanto um simples benchmark de CPU usando sysbench(com toda a outra carga desativada) produziu uma diferença, foi de apenas 6%. Portanto, talvez não seja apenas a CPU, mas também o desempenho da memória.

Até agora eu verifiquei:

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

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

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

ATUALIZAÇÃO : Yay! Ambos os servidores têm o mesmo desempenho agora. Foram as configurações de "power CRAP", como jim_m_somewhere as nomeou nos comentários. As opções do BIOS para "Gerenciamento de energia" estavam em "Desempenho máximo" no servidor rápido e em "Controlador de energia ativo" (configuração padrão da Dell) no outro. Obviamente, 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!

the.duckman
fonte
2
É possível que você tenha RAM com defeito. Se o seu aplicativo estiver pesado em rede, pode ser qualquer coisa na pilha de rede.
K4 de
2
Você pode comparar as "Configurações avançadas da CPU" no BIOS? - pode executar um comando ipmitool para fazer isso? A velocidade na RAM é a mesma? Presumo que você tenha verificado se possui bateria reserva em discos / controladores ... só pensando "em voz alta" ... a RAM nas duas caixas é a mesma? registrado ou não registrado ... AH ... você verificou se o "power CRAP" - ACPI está desativado nos dois servidores?
precisa saber é o seguinte
2
se eles estão servindo os mesmos dados, algum balanceamento de carga está acontecendo a partir de um fw ou dns? como são as estatísticas da rede? as configurações de java são idênticas também? o tamanho da pilha de java é o mesmo? atirando no escuro neste.
au_stan 4/12/12
2
A configuração do software é realmente idêntica? Por exemplo, o AppArmor está ativado em um e desativado no outro? Verifique também 'dmesg' quanto a erros.
Anton Cohen
1
Você está verificado o cabo com fio de rede, a porta do switch e também você ver as iops ou verificar a saúde de HDD ... Saudações

Respostas:

6

Duas idéias, dependendo de quão longe você deseja ir com isso:

  1. Troque os discos dos dois servidores e verifique se o desempenho da 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.outse você pode de alguma forma enganar este pacote para instalar.

chutz
fonte
A saída do dstat mostrou claramente, que a diferença no desempenho ocorre também quando não há IO. Instalar syscfg no Ubuntu 10.4 parece realmente complicado. Já comparei a saída do dmidecode, o sysctl mostraria mais? Talvez seja menos trabalhoso tirar fotos de cada tela do BIOS e compará-las. Eu posso tentar isso.
precisa saber é o seguinte
1
Ao trocar os discos, não pretendi investigar o IO, mas se a configuração de software (mis) está causando a lentidão (um parâmetro estranho do kernel, por exemplo).
chutz
3

Mais possibilidades de saída e diff:

  • sysctl -a (verifique se os ajustes do kernel são os mesmos)
  • cat / proc / interrupts (Talvez haja alguma outra peça de hardware bagunçando?)
  • lista de sensores ipmitool (possibilidade remota, mas verifique se há mais diferenças de nível baixo, superaquecimento, problemas de tensão etc.)
SolarKennedy
fonte
Obrigado, nenhuma diferença óbvia na saída desses comandos, infelizmente.
227128 The Duckman
2
Todas as diferenças são óbvias, se você comparar arquivos usando o software . Por favor, consulte esta pergunta: Como diferencio dois arquivos de configuração?
quer
3

Parece que pode ser um balanceador de carga relacionado a mim. Quando você diz "mesma carga de trabalho", como está medindo isso?
Você está comparando diretamente cada servidor aplicando uma carga de teste isoladamente?
ou Você está aplicando alguma carga ao balanceador de carga e olhando os resultados nos dois servidores?

Se você estiver fazendo o último (medindo a carga colocada nos dois servidores por meio do balanceador de carga), seu balanceador de carga pode não estar dividindo a carga de trabalho exatamente de maneira uniforme entre os servidores (uma inclinação de 20% para um par de servidores não é incomum, dependendo de como seu balanceador de carga decide quem recebe quais solicitações), o que está fazendo com que um servidor tome mais carga e, portanto, apresenta um desempenho ruim.

(Se você estiver comparando diretamente cada servidor, isoladamente, sem usar o balanceador de carga como intermediário, e tiver verificado que todos os componentes são idênticos (até as revisões do fabricante) entre os dois sistemas, estou com uma perda - Não consigo pensar em outro motivo mensurável para esse tipo de diferença de desempenho entre servidores idênticos.

voretaq7
fonte
Você está certo, nosso balanceador de carga também faz isso - na verdade, é um recurso. Por isso, avaliei de várias maneiras e, sim, até repeti as mesmas solicitações em cada servidor individualmente uma vez. Mas mesmo para simplesmente colocar todo o tráfego ao vivo em um único servidor por algum tempo e comparar o tempo que cada servidor precisava para preparar a resposta produz os mesmos resultados que as configurações mais complexas.
227127
Hmm - nesse caso, estou oficialmente perplexo - se tudo for realmente idêntico (e parece que confirmamos muito bem que é), você deve estar dentro de uma margem razoável de erro nos números de desempenho (± 5-7%) - você 'estamos vendo variações de mais do que o dobro, e eu não tenho idéia do porquê: - /
voretaq7
3

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

Com o perf, você pode criar um perfil do processo Java em execução por PID ou criar um benchmark. Olhe para os dois 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 idéias de como os sistemas podem funcionar de maneira diferente:

Ambiente: a temperatura ou o fluxo de ar são diferentes? Eles estão em prateleiras? Vi sistemas executar diferentemente em posições diferentes de rack, causadas 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 usada. Mas vi discos abrandar para gravações sequenciais de 2 MB / s devido à vibração em partes de um rack.

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

Anton Cohen
fonte