Ich verwende zwei Dell R410- Server im selben Rack eines Rechenzentrums (hinter einem Load Balancer). Beide haben dieselbe Hardwarekonfiguration, führen Ubuntu 10.4 aus, haben dieselben Pakete installiert und führen dieselben Java-Webserver aus (keine andere Last), und ich sehe einen erheblichen Leistungsunterschied zwischen beiden.
Der Leistungsunterschied zeigt sich am deutlichsten in den durchschnittlichen Antwortzeiten beider Server (gemessen in der Java-App selbst, ohne Netzwerklatenzen): Einer von ihnen ist 20 bis 30% schneller als der andere, sehr konsistent.
Früher habe ich dstat
herausgefunden, ob es mehr Kontextwechsel, E / A, Tauschen oder ähnliches gibt, aber ich sehe keinen Grund für den Unterschied. Bei gleicher Arbeitslast (kein Austausch, praktisch keine E / A) ist die CPU-Auslastung und -Last auf einem Server höher.
Der Unterschied scheint also hauptsächlich an die CPU gebunden zu sein, aber während ein einfacher CPU-Benchmark mit sysbench
(bei ausgeschalteter anderer Last) einen Unterschied ergab, betrug er nur 6%. Vielleicht liegt es also nicht nur an der CPU, sondern auch an der Speicherleistung.
Bisher habe ich überprüft:
- Firmware-Revisionen aller Komponenten (identisch)
- BIOS-Einstellungen (Ich habe einen Dump mit verwendet
dmidecode
, und das zeigte keine Unterschiede) - Ich habe verglichen
/proc/cpuinfo
, kein Unterschied. - Ich habe die Ausgabe von verglichen
cpufreq-info
, kein Unterschied. - Java / JVM-Parameter (gleiche Version und Parameter auf beiden Systemen)
Außerdem habe ich den RAM vor einigen Monaten komplett ausgetauscht, ohne dass dies Auswirkungen hatte.
Ich bin verloren. Was kann ich tun, um herauszufinden, was los ist?
UPDATE : Yay! Beide Server arbeiten jetzt gleich. Es waren die "Power CRAP" -Einstellungen, wie jim_m_somewhere sie in den Kommentaren nannte. Die BIOS-Optionen für "Power Management" waren auf dem schnellen Server "Maximum Performance" und auf dem anderen Server "Active Power Controller" (Standardeinstellung von Dell). Offensichtlich habe ich vergessen, dass ich diese Einstellung vor zwei Jahren vorgenommen habe, und das habe ich nicht auf allen Servern getan. Vielen Dank an alle für Ihre sehr hilfreichen Beiträge!
quelle
Antworten:
Zwei Ideen, je nachdem, wie weit Sie damit gehen möchten:
Tauschen Sie die Festplatten beider Server aus und prüfen Sie, ob die Geschwindigkeitsleistung auf der Hardware verbleibt oder sich mit der Software ändert.
Vergleichen Sie die Ausgabe von,
/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
wenn Sie dieses Paket irgendwie zur Installation austricksen können.quelle
Weitere Möglichkeiten zur Ausgabe und Diff:
quelle
Das klingt so, als wäre es ein mit mir verwandter Load-Balancer. Wenn Sie "gleiche Arbeitsbelastung" sagen, wie messen Sie dies?
Vergleichen Sie jeden Server direkt, indem Sie eine Testlast isoliert anwenden?
oder Wenden Sie eine Last auf den Load Balancer an und sehen Sie sich die Ergebnisse auf beiden Servern an?
Wenn Sie Letzteres tun (Messen der Last, die auf beiden Servern über den Load Balancer platziert wird), teilt Ihr Load Balancer die Arbeitslast möglicherweise nicht exakt gleichmäßig auf die Server auf (ein 20% iger Versatz für ein Serverpaar ist nicht ungewöhnlich, je nachdem, wie Ihr Load Balancer entscheidet, wer welche Anforderungen erhält. Dies führt dazu, dass ein Server mehr Last aufnimmt und daher eine schlechte Leistung erbringt.
(Wenn Sie jeden Server einzeln direkt vergleichen, ohne den Load Balancer als Vermittler zu verwenden, und Sie überprüft haben, dass jede Komponente (bis auf Herstellerrevisionen) zwischen beiden Systemen identisch ist, bin ich ratlos - Ich kann mir keinen anderen messbaren Grund für diese Art von Leistungsunterschied zwischen ansonsten identischen Servern vorstellen.
quelle
Probieren Sie einige Profiling-Tools aus, entweder System-Profiling wie perf oder Java-Profiling wie VisualVM .
Mit perf können Sie entweder den laufenden Java-Prozess anhand der PID oder einen Benchmark profilieren. Schauen Sie sich beide Systeme an und sehen Sie, wo das langsame System seine Zeit verbringt.
Dann so etwas wie:
oder
dann
Ein paar Ideen, wie Systeme anders funktionieren können:
Umgebung: Ist die Lufttemperatur oder der Luftstrom unterschiedlich? Sind sie in Gestellen? Ich habe gesehen, dass Systeme in verschiedenen Rackpositionen aufgrund von Vibrationen unterschiedliche Leistungen erbringen. In jedem Rack gibt es unterschiedliche Vibrationsstufen. Es ist unwahrscheinlich, wenn man bedenkt, dass fast keine E / A verwendet wird. Ich habe jedoch gesehen, dass Festplatten aufgrund von Vibrationen in Teilen eines Racks auf sequenzielle Schreibvorgänge von 2 MB / s verlangsamt wurden.
Hardwarefehler: Jede Hardware kann fehlerhaft sein. Verwenden Sie die Profilerstellung, um zu sehen, was langsam ist. Es könnte sich um eine fehlerhafte CPU oder einen fehlerhaften Chipsatz handeln, einen nicht richtig angeschlossenen Kühlkörper, aus dem Gleichgewicht geratene Lüfter, die Vibrationen verursachen, ausgefallene Lüfter oder sogar ein schlechtes Netzteil. Versuchen Sie, Dinge auszutauschen, die leicht auszutauschen sind.
quelle
Warum hat niemand 'sysprof' vorgeschlagen?
Dafür wurde es entwickelt.
Oder ummm zweiter Gedanke ... versuchen Sie, einige Grenzen in /etc/security/limits.conf zu füllen
Versuchen Sie beides.
Wenn Sie nichts bekommen ... haben Sie höchstwahrscheinlich ein Sicherheitsproblem oder einen physischen Defekt.
Siehe auch: Mein Linux-Server "Anzahl der erstellten Prozesse" und "Kontextwechsel" wächst unglaublich schnell
quelle