Come trovo la causa di un'enorme differenza nelle prestazioni tra due server Ubuntu identici?


9

Sto eseguendo due server Dell R410 nello stesso rack di un data center (dietro un bilanciamento del carico). Entrambi hanno la stessa configurazione hardware, eseguono Ubuntu 10.4, hanno gli stessi pacchetti installati ed eseguono gli stessi server Web Java (nessun altro carico) e vedo una sostanziale differenza di prestazioni tra i due.

La differenza di prestazioni è più evidente nei tempi medi di risposta di entrambi i server (misurati nella stessa app Java, senza latenze di rete): uno di questi è il 20-30% più veloce dell'altro, in modo molto coerente.
Ho usato dstatper capire, se ci sono più cambi di contesto, IO, scambio o altro, ma non vedo alcuna ragione per la differenza. Con lo stesso carico di lavoro (senza scambio, praticamente senza IO), l'utilizzo della CPU e il carico sono maggiori su un server.

Quindi la differenza sembra essere principalmente legata alla CPU, ma mentre un semplice benchmark della CPU che utilizza sysbench(con tutti gli altri carichi disattivati) ha prodotto una differenza, era solo del 6%. Quindi forse non è solo la CPU ma anche le prestazioni della memoria.

Finora ho controllato:

  • Revisioni del firmware su tutti i componenti (identici)
  • Impostazioni del BIOS (ho fatto un dump usando dmidecodee questo non ha mostrato differenze)
  • Ho confrontato /proc/cpuinfo, nessuna differenza.
  • Ho confrontato l'output di cpufreq-info, nessuna differenza.
  • Parametri Java / JVM (stessa versione e parametri su entrambi i sistemi)

Inoltre, ho completamente sostituito la RAM alcuni mesi fa, senza alcun effetto.

Mi sono perso. Cosa posso fare per capire, cosa sta succedendo?

AGGIORNAMENTO : Yay! Entrambi i server funzionano allo stesso modo ora. Erano le impostazioni di "power CRAP" come jim_m_somewhere le ha nominate nei commenti. Le opzioni del BIOS per "Risparmio energia" erano su "Prestazioni massime" sul server veloce e su "Active Power Controller" (impostazione predefinita da Dell) sull'altro. Ovviamente ho dimenticato, che ho fatto quell'impostazione due anni fa, e non l'ho fatto su tutti i server. Grazie a tutti per il vostro contributo molto utile!


2
È possibile che tu abbia RAM difettosa. Se l'applicazione è pesante in rete, potrebbe essere qualsiasi cosa nello stack di rete.
Kyle,

2
Riesci a confrontare le "Impostazioni avanzate della CPU" nel BIOS? - potrebbe essere in grado di eseguire un comando ipmitool per farlo? La velocità sulla RAM è la stessa? Presumo che tu abbia verificato se hai il backup della batteria su dischi / controller ... solo pensando ad alta voce ... la RAM su entrambe le scatole è la stessa? registrato o non registrato ... AH ... hai verificato che "power CRAP" - ACPI sia spento su entrambi i server?
jim_m_somewhere

2
se stanno fornendo gli stessi dati, qualche bilanciamento del carico in corso da un fw o dns? che aspetto hanno le statistiche di rete? anche le configurazioni java sono identiche? la dimensione dell'heap java è la stessa? sparando al buio su questo.
au_stan,

2
La configurazione del software è davvero identica? Ad esempio, AppArmor è abilitato su uno e disabilitato sull'altro? Controlla anche 'dmesg' per errori.
Anton Cohen,

1
Hai controllato il cavo cablato della rete, la porta sullo Switch e vedi anche gli iop o controlla lo stato dell'HDD ... Saluti

Risposte:


6

Due idee, a seconda di quanto lontano vuoi andare con questo:

  1. Scambia i dischi di entrambi i server e verifica se le prestazioni di velocità rimangono sull'hardware o si spostano con il software.

  2. Confronta l'output di /opt/dell/toolkit/bin/syscfg -o complete-bios-config.outse riesci in qualche modo a ingannare questo pacchetto da installare.


L'output di dstat ha mostrato abbastanza chiaramente che la differenza nelle prestazioni si verifica anche quando non si verifica alcun IO. Installare syscfg su Ubuntu 10.4 sembra davvero complicato. Ho già confrontato l'output di dmidecode, sysctl mostrerebbe di più? Forse è meno lavoro per le foto di ogni schermata del BIOS e confrontarle. Potrei provare questo.
the.duckman,

1
Scambiando i dischi non intendevo investigare l'IO, ma piuttosto se è la configurazione software (mis) che sta causando la lentezza (ad esempio un parametro del kernel dispari).
Chutz

3

Altre possibilità di output e diff:

  • sysctl -a (assicurarsi che i parametri sintonizzabili del kernel siano gli stessi)
  • cat / proc / interrupt (forse c'è qualche altro componente hardware che rovina?)
  • elenco dei sensori ipmitool (long shot, ma verifica la presenza di differenze di livello più basso, surriscaldamento, problemi di tensione, ecc.)

Grazie, nessuna evidente differenza nell'output di questi comandi, sfortunatamente.
the.duckman,

2
Tutte le differenze sono evidenti se si confrontano i file utilizzando il software . Si prega di fare riferimento a questa domanda: come diff diff due file di configurazione?
Skyhawk,

3

Sembra che potrebbe essere un bilanciamento del carico correlato a me. Quando dici "stesso carico di lavoro" come stai misurando questo?
Stai confrontando direttamente ciascun server applicando un carico di prova in isolamento?
oppure State applicando un carico al bilanciamento del carico e osservando i risultati su entrambi i server?

Se si sta eseguendo questi ultimi (misurando il carico posizionato su entrambi i server tramite il bilanciamento del carico), il bilanciamento del carico potrebbe non suddividere il carico di lavoro in modo uniforme tra i server (un'inclinazione del 20% per una coppia di server non è rara a seconda di come il bilanciamento del carico decide chi riceve quali richieste), causando un carico maggiore a un server e quindi con prestazioni scadenti.

(Se esegui il benchmarking diretto di ciascun server, in isolamento, senza utilizzare il bilanciamento del carico come intermediario e hai verificato che ogni componente è identico (fino alle revisioni del produttore) tra entrambi i sistemi, allora sono in perdita - Non riesco a pensare a nessun altro motivo misurabile per questo tipo di differenza di prestazioni tra server altrimenti identici)


Hai ragione, anche il nostro bilanciamento del carico lo fa - in realtà è una funzione. Quindi ho misurato in molti modi, e sì, ho anche "riprodotto" le stesse richieste su ciascun server singolarmente una volta. Ma anche semplicemente mettere tutto il traffico attivo su un singolo server per un po 'di tempo e confrontare il tempo necessario a ciascun server per preparare la risposta produce gli stessi risultati delle configurazioni più complesse.
the.duckman,

Hmm - in questo caso sono ufficialmente sconcertato - se tutto è veramente identico (e sembra che l'abbiamo confermato abbastanza bene che lo sia) dovresti essere entro un ragionevole margine di errore sui numeri delle prestazioni (± 5-7%) - tu
stai

3

Prova alcuni strumenti di profilazione, la profilazione di sistema come perf o la profilazione Java come VisualVM .

Con perf potresti profilare il processo Java in esecuzione tramite PID o profilare un benchmark. Guarda entrambi i sistemi, vedi dove il sistema lento sta spendendo il suo tempo.

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

Quindi qualcosa come:

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

o

perf record -a -g <benchmark command>

poi

perf report

Un paio di idee su come i sistemi possono funzionare diversamente:

Ambiente: la temperatura o il flusso d'aria è diverso? Sono in rack? Ho visto i sistemi funzionare diversamente in diverse posizioni del rack, causate dalle vibrazioni. Esistono diversi livelli di vibrazione in ogni rack. È improbabile, considerando che hai detto che non c'è quasi nessun I / O in uso. Ma ho visto i dischi rallentare a 2 MB / sec di scritture sequenziali a causa delle vibrazioni in alcune parti di un rack.

Guasti hardware: qualsiasi hardware potrebbe essere difettoso. Usa la profilazione per vedere cosa è lento. Potrebbe essere una CPU o un chipset difettoso, un dissipatore di calore non collegato correttamente, ventole sbilanciate che causano vibrazioni, ventole guaste, persino un alimentatore difettoso. Prova a scambiare cose che sono facili da scambiare.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.