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 dstat
descobrir 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
dmidecode
e 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!
fonte
Respostas:
Duas idéias, dependendo de quão longe você deseja ir com isso:
Troque os discos dos dois servidores e verifique se o desempenho da velocidade permanece no hardware ou se move com o software.
Compare a saída de
/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
se você pode de alguma forma enganar este pacote para instalar.fonte
Mais possibilidades de saída e diff:
fonte
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.
fonte
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.
Então algo como:
ou
então
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.
fonte
Por que ninguém sugeriu 'sysprof' ..?
Foi para isso que foi projetado.
Ou ummm, pensei duas vezes ... tente colocar alguns limites no /etc/security/limits.conf
Experimente os dois.
Se você não obtiver nada ..., é provável que tenha um problema de segurança ou um defeito físico.
veja também: Meu servidor Linux "Número de processos criados" e "Comutadores de contexto" estão crescendo incrivelmente rápido
fonte