Comment puis-je trouver la cause d'une énorme différence de performances entre deux serveurs Ubuntu identiques?

9

J'exécute deux serveurs Dell R410 dans le même rack d'un centre de données (derrière un équilibreur de charge). Les deux ont la même configuration matérielle, exécutent Ubuntu 10.4, ont les mêmes packages installés et exécutent les mêmes serveurs Web Java (aucune autre charge) et je constate une différence de performances substantielle entre les deux.

La différence de performances est plus évidente dans les temps de réponse moyens des deux serveurs (mesurés dans l'application Java elle-même, sans latences réseau): l'un d'entre eux est 20-30% plus rapide que l'autre, de manière très cohérente.
J'avais l'habitude dstatde comprendre s'il y avait plus de changements de contexte, d'E / S, d'échange ou quoi que ce soit, mais je ne vois aucune raison de la différence. Avec la même charge de travail (pas d'échange, pratiquement pas d'E / S), l'utilisation et la charge du processeur sont plus élevées sur un serveur.

La différence semble donc être principalement liée au processeur, mais alors qu'un simple benchmark de processeur utilisant sysbench(avec toutes les autres charges désactivées) a produit une différence, il n'était que de 6%. Alors peut-être que ce n'est pas seulement le CPU mais aussi les performances de la mémoire.

Jusqu'à présent, j'ai vérifié:

  • Révisions du firmware sur tous les composants (identiques)
  • Paramètres du BIOS (j'ai fait un vidage en utilisant dmidecode, et cela n'a montré aucune différence)
  • J'ai comparé /proc/cpuinfo, aucune différence.
  • J'ai comparé la sortie de cpufreq-info, pas de différence.
  • Paramètres Java / JVM (même version et paramètres sur les deux systèmes)

De plus, j'ai complètement remplacé la RAM il y a quelques mois, sans aucun effet.

Je suis perdu. Que puis-je faire pour comprendre ce qui se passe?

MISE À JOUR : Yay! Les deux serveurs fonctionnent maintenant de la même manière. Ce sont les paramètres "power CRAP" comme jim_m_somewhere les a nommés dans les commentaires. Les options du BIOS pour «Power Management» étaient sur «Maximum Performance» sur le serveur rapide et sur «Active Power Controller» (paramètre par défaut de Dell) sur l'autre. Évidemment, j'ai oublié que j'ai fait ce réglage il y a deux ans et je ne l'ai pas fait sur tous les serveurs. Merci à tous pour votre contribution très utile!

the.duckman
la source
2
Il est possible que vous ayez une RAM défectueuse. Si votre application est lourde sur le réseau, il peut y avoir quelque chose le long de la pile réseau.
Kyle
2
Pouvez-vous comparer les "Paramètres avancés du CPU" dans le BIOS? - pourrait être en mesure d'exécuter une commande ipmitool pour le faire? La vitesse sur la RAM est-elle la même? Je suppose que vous avez vérifié si vous avez une batterie de secours sur les disques / contrôleurs ... juste en pensant "à haute voix" ... la RAM des deux boîtiers est-elle la même? enregistré ou non enregistré ... AH ... avez-vous vérifié que le "power CRAP" - ACPI est éteint sur les deux serveurs?
jim_m_somewhere
2
s'ils servent les mêmes données, un équilibrage de charge en cours à partir d'un fw ou d'un DNS? à quoi ressemblent les statistiques du réseau? les configurations java sont-elles également identiques? la taille du tas java est-elle la même? tir dans le noir sur celui-ci.
au_stan
2
La configuration logicielle est-elle vraiment identique? Par exemple, AppArmor est-il activé sur l'un et désactivé sur l'autre? Vérifiez également «dmesg» pour les erreurs.
Anton Cohen
1
Êtes-vous vérifié le câble réseau câblé, le port sur le commutateur et vous voyez également les iops ou vérifiez la santé du disque dur ... Cordialement

Réponses:

6

Deux idées, selon jusqu'où vous voulez aller:

  1. Échangez les disques des deux serveurs et voyez si les performances de vitesse restent sur le matériel ou évoluent avec le logiciel.

  2. Comparez la sortie de /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outsi vous pouvez en quelque sorte tromper ce paquet à installer.

chutz
la source
La sortie de dstat a montré assez clairement que la différence de performances se produit également, lorsqu'aucune entrée-sortie ne se produit. L'installation de syscfg sur Ubuntu 10.4 semble en effet délicate. J'ai déjà comparé la sortie de dmidecode, sysctl afficherait-il plus? Peut-être que c'est moins de travail de comparer les photos de chaque écran du BIOS. Je pourrais essayer ça.
the.duckman
1
En échangeant les disques, je ne voulais pas enquêter sur les E / S, mais plutôt si c'est une (mauvaise) configuration logicielle qui cause la lenteur (un paramètre de noyau étrange par exemple).
chutz
3

Plus de possibilités de sortie et de diff:

  • sysctl -a (assurez-vous que les ajustables du noyau sont les mêmes)
  • cat / proc / interrupts (Peut-être qu'il y a un autre morceau de matériel qui gâche?)
  • Liste des capteurs ipmitool (plan long, mais vérifiez les différences de niveau plus faibles, la surchauffe, les problèmes de tension, etc.)
SolarKennedy
la source
Merci, aucune différence évidente dans la sortie de ces commandes, malheureusement.
the.duckman
2
Toutes les différences sont évidentes, si vous comparez des fichiers à l'aide d'un logiciel . Veuillez vous référer à cette question: Comment puis-je différencier deux fichiers de configuration?
Skyhawk
3

Cela peut sembler être un équilibreur de charge lié à moi. Lorsque vous dites «même charge de travail», comment mesurez-vous cela?
Comparez-vous directement chaque serveur en appliquant une charge de test de manière isolée?
ou Appliquez-vous une charge à l'équilibreur de charge et examinez-vous les résultats sur les deux serveurs?

Si vous effectuez ce dernier (mesure de la charge placée sur les deux serveurs via l'équilibreur de charge), votre équilibreur de charge peut ne pas répartir la charge de travail exactement également entre les serveurs (une asymétrie de 20% pour une paire de serveurs n'est pas rare selon la façon dont votre équilibreur de charge décide qui reçoit quelles demandes), ce qui entraîne un serveur à prendre plus de charge et donc à mal fonctionner.

(Si vous comparez directement chaque serveur, de manière isolée, sans utiliser l'équilibreur de charge comme intermédiaire, et que vous avez vérifié que chaque composant est identique (jusqu'aux révisions du fabricant) entre les deux systèmes, alors je suis à perte - Je ne peux penser à aucune autre raison mesurable pour ce genre de différence de performances entre des serveurs par ailleurs identiques)

voretaq7
la source
Vous avez raison, notre équilibreur de charge le fait aussi - c'est en fait une fonctionnalité. J'ai donc mesuré de nombreuses façons, et oui, j'ai même "rejoué" les mêmes demandes sur chaque serveur individuellement une fois. Mais même pour simplement mettre tout le trafic en direct sur un seul serveur pendant un certain temps et comparer le temps nécessaire à chaque serveur pour préparer la réponse donne les mêmes résultats que les configurations plus complexes.
the.duckman
Hmm - dans ce cas, je suis officiellement perplexe - si tout est vraiment identique (et nous semblons avoir bien confirmé que c'est le cas), vous devriez être dans une marge d'erreur raisonnable sur les performances (± 5-7%) - vous voit des variations de plus du double, et je ne sais pas pourquoi: - /
voretaq7
3

Essayez certains outils de profilage, soit le profilage système comme perf ou le profilage Java comme VisualVM .

Avec perf, vous pouvez profiler le processus Java en cours d'exécution par PID ou profiler une référence. Regardez les deux systèmes, voyez où le système lent passe son temps.

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

Ensuite, quelque chose comme:

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

ou

perf record -a -g <benchmark command>

puis

perf report

Quelques idées sur la façon dont les systèmes peuvent fonctionner différemment:

Environnement: la température ou le débit d'air sont-ils différents? Sont-ils dans des racks? J'ai vu des systèmes fonctionner différemment dans différentes positions de rack, provoqués par des vibrations. Il existe différents niveaux de vibration dans chaque rack. C'est peu probable, étant donné que vous avez dit qu'il n'y avait presque pas d'E / S utilisées. Mais j'ai vu des disques ralentir à 2 Mo / s d'écriture séquentielle en raison de vibrations dans certaines parties d'un rack.

Défaillances matérielles: tout matériel peut être défectueux. Utilisez le profilage pour voir ce qui est lent. Il peut s'agir d'un mauvais processeur ou chipset, d'un dissipateur thermique mal fixé, de ventilateurs déséquilibrés provoquant des vibrations, de ventilateurs défaillants, voire d'un mauvais bloc d'alimentation. Essayez d'échanger des choses faciles à échanger.

Anton Cohen
la source