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 dstat
de 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!
la source
Réponses:
Deux idées, selon jusqu'où vous voulez aller:
Échangez les disques des deux serveurs et voyez si les performances de vitesse restent sur le matériel ou évoluent avec le logiciel.
Comparez la sortie de
/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
si vous pouvez en quelque sorte tromper ce paquet à installer.la source
Plus de possibilités de sortie et de diff:
la source
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)
la source
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.
Ensuite, quelque chose comme:
ou
puis
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.
la source
Pourquoi personne n'a suggéré 'sysprof' ..?
C'est pour cela qu'il a été conçu.
Ou ummm seconde pensée ... essayez de bourrer certaines limites dans /etc/security/limits.conf
Essayez les deux.
Si vous n'obtenez rien ... vous avez très probablement un problème de sécurité ou un défaut physique.
voir aussi: Mon serveur linux "Nombre de processus créés" et "Context switches" se développent incroyablement rapidement
la source