Linux con 256 GB di mem / 48 core - La macchina inizia a bloccarsi / soffocare con tonnellate di memoria rimaste


12

Macchina: Dell r815, CentOS 5.4, 256 GB di RAM, 4 x 12 core.

Abbiamo un'applicazione che ha un file da 275 GB. Fa un ordinamento sul posto su 20 GB di dati alla volta, cioè scambia i bit e li sostituisce nello stesso file. Funziona tutto bene.

C'è un ultimo passaggio che poi legge l'intero file e fa un ordinamento di unione sui diversi blocchi da 20 GB e li restituisce a un file completamente nuovo.

Questo processo sembra funzionare bene per un po 'e finisce per scaricare circa 50 GB su disco. Qualche tempo dopo, l'intera macchina inizia a dare di matto.

Comandi semplici come ps -ef, ls -al, appendere per lungo tempo e mostrano come prendendo 100% CPU (che è solo un core).

Osservando le statistiche della memoria top, vedo che utilizza circa 120 GB di RAM (quindi 128 GB gratuiti) e 120 GB nella sezione "cache".

Qualcuno ha mai visto questo tipo di comportamento prima? Lo stesso processo funziona bene su una macchina con 64 GB di memoria, quindi in qualche modo penso che sia correlato al montaggio della RAM che ho nella macchina.

(mentre parliamo, sto eseguendo il test su questa macchina con tutti tranne 64 GB - per escludere un problema hardware).

Mi sto forse perdendo alcuni parametri vm /etc/sysctrl.conf?

Grazie!


Cosa stanno facendo i dischi ... Stai andando all'inferno di scambio ????
Arenstar,

64 bit kernel / app / etc? hai cpu del 100% cpu, qual è la media del carico quando succede, è l'app multithread (in caso contrario non utilizzerà tutti i processori), cosa ti dice vmstat 4 (in particolare io / cpu)
coredump

come "ps" sono 100% cpu fuori dal 4800% (perché 48 core) - quindi sono probabilmente bloccati da io o qualcosa del genere. la media del carico sulla scatola è solo come 5. i dischi, che sono allo stato solido, non vedono molte scritture ... Sembra più un problema del kernel che delle risorse
aspitzer

la macchina non si sta affatto scambiando.
aspitzer,

1
sì .. eseguendolo ora con 64 GB. entro un'ora dovrebbe sapere se si riferiva alla quantità totale di mem nella macchina
aspitzer

Risposte:


12

La tua domanda mi ha ricordato qualcosa che ho letto di recente:

http://jcole.us/blog/archives/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/

Questo risolve il modo in cui le architetture NUMA (come si potrebbe trovare, per esempio, in un sistema AMD a 48 core) influenzano l'allocazione e lo scambio di memoria. Non so se questo è quello che stai incontrando, ma sembrava sufficientemente simile da valere la pena di leggerlo.

Anche se non è la risposta che rende affascinante la lettura.


1
Sembra un colpo degno del problema di questa domanda. Ed è una lettura fantastica.
coredump,

1
Questa è un'ottima lettura e 4 socket, 256 Gb di RAM = 64 Gb per nodo, e quello sembra essere il punto in cui si verificano problemi, che replica esattamente la situazione nel documento.
Mark Henderson

12

Quindi questo sembrava essere un bug del kernel in 64 bit Centos 5.4 e 64 bit Fedora 14. Dopo aver installato Centos 5.5, il problema è scomparso.

Scusa, non ho una risposta migliore per tutti ...


1
Ehi amico, se è quello che l'ha riparato, è quello che l'ha riparato. Concediti il ​​segno di spunta, in modo che altre persone possano imparare dalle tue difficoltà :-)
mfinni,

0

Potresti provare ad aggiungere una riga a /etc/sysctl.conf per specificare che lo swap deve essere usato solo quando assolutamente necessario.

swappiness = 0

Potresti già essere consapevole che questo file definisce le impostazioni globali, quindi è necessario considerare l'impatto che questa modifica avrà sul resto delle applicazioni in esecuzione nell'ambiente.


che è già impostato ... ma come ho già detto, ci sono 128 GB gratuiti, quindi non sta colpendo alcun problema di scambio.
aspitzer,

0

Dov'è il tuo spazio temporaneo. Spesso è su tempfs. Tempfs disegna lo spazio dalla memoria di cui è stato eseguito il backup dallo spazio di scambio, quindi se si finisce con troppe cose in tempfs, si attiva l'I / O di scambio.

Data la dimensione dei dati che stai unendo, mi aspetto che si verifichi swappiness quando si raggiunge l'unione finale.

Diffondere la memoria di swap su più dischi può essere d'aiuto.


0

Anche se potresti non essere in grado di colpire lo swap, potresti comunque essere legato a I / O. Le informazioni suggeriscono questo.

Vorrei guardare l'output di dstat -dfper mostrare le statistiche del disco, oppure dstat -af(sì, sarà largo un bajillion di colonne; questo è ciò che accade quando si hanno 48 core e mostrano l'utilizzo della CPU su tutti loro) se si desidera vedere tutto.

Sarei sorpreso se tutte le CPU fossero occupate (unire l'ordinamento non è un compito intensivo per la CPU), ma non dici nulla del tuo sistema I / O. Se si dispone di pochi dischi e un mucchio di file, è possibile che si verifichi il thrashing del disco facendo ricerche su ciascun file per mantenere alimentato l'ordinamento di tipo merge.

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.