GNU/Linux >> Linux Esercitazione >  >> Linux

Il sistema si blocca quando esaurisce la memoria

È possibile chiamare OOM-killer (out of memory killer) direttamente tramite la combinazione di tasti:

SysRq-F

Il tasto SysRq è solitamente combinato con il tasto PrtSc sulle tastiere.

OOM-killer interrompe alcuni processi e il sistema torna a rispondere.

Grazie Raman per i consigli su questa funzione nei commenti sopra.

PS:questo mi ha aiutato molto. Sono d'accordo con l'opinione che questo sia il consiglio più utile su quel problema se causato da Chrome o da qualsiasi altro software avido di memoria. Ma devi tenere presente che OOM-killer potrebbe interrompere alcuni processi davvero importanti, usalo con attenzione.


Lo stato naturale delle cose è che i dati dell'applicazione sono nella RAM e i file sono sul disco.
Lo stato ideale delle cose, dal punto di vista delle prestazioni, è che i dati di uso frequente sono nella RAM e i dati che non sono necessari al momento sono su disco.
Su un sistema normale, il kernel fa due cose per tentare di raggiungere questo ideale:

  • I dati dell'applicazione che non sono stati utilizzati per un po' possono essere spostati su disco:questo è swap.
  • I dati dei file utilizzati di recente vengono conservati nella RAM:si tratta della cache del disco (per i dati letti dal disco) e dei buffer del disco (per i dati che stanno per essere scritti sul disco).

Su un sistema tipico, una parte significativa della RAM è dedicata alla cache e ai buffer (il 50% è una cifra tipica). Poiché la RAM è una risorsa limitata, ciò potrebbe richiedere lo spostamento di alcuni dati dell'applicazione da scambiare (lo scambio è necessario solo se esiste un modo migliore per utilizzare la RAM).

Su un sistema senza scambio, c'è un punto in cui i dati dell'applicazione utilizzano quasi tutta la RAM, quindi non c'è quasi più spazio per la cache. Quindi è probabile che il sistema sia lento. Il kernel non inizierà a uccidere le applicazioni fino a quando non sarà davvero necessario. Finché le applicazioni riempiono solo il 99% della memoria disponibile, il sistema continua a funzionare, ma molto lentamente perché i dati dei file devono essere caricati e ricaricati continuamente dal disco. Con le stesse applicazioni in esecuzione, a quel punto il sistema sarebbe più veloce con lo scambio.

Per ulteriori informazioni su questo problema, vedere questa discussione su lkml e questo post sul blog.

Non conosco un modo diretto per dire al kernel di riservare una quantità minima di RAM per la cache del disco. Potresti impostare una piccola parte della tua RAM come spazio di swap, forse anche compresso. Ci sono rapporti di successo su questo fronte, anche se non garantisco nel tuo caso particolare.


Di recente ho trovato una soluzione al mio problema.

Dal momento che Linux OOM killer non è in grado di svolgere correttamente il suo lavoro, ho iniziato a utilizzare uno userspace OOM Killer:earlyoom. È scritto in C, abbastanza configurabile e per me funziona a meraviglia.

Ho anche sentito parlare di alcune alternative, come OOMD di Facebook, sviluppate per funzionare sui loro server, ma non ho provato questa


Linux
  1. Misurare l'utilizzo della RAM di un programma?

  2. Linux:il sistema si blocca quando esaurisce la memoria?

  3. Come impedire che il sistema non risponda durante il thrashing (fuori dalla RAM)?

  4. Domande frequenti su disco di sistema e disco dati

  5. Come posso testare la RAM per la corruzione dei dati su un sistema basato su ARM?

Gestione dello swap nel moderno sistema Linux

Trova la dimensione della RAM in Linux

Linux:scopri quale processo sta usando tutta la RAM?

Perché il mio sistema mostra solo 3,2 GiB di RAM quando ho sicuramente 4,0 GiB

Linux:scambia in blocchi più grandi

Perché Swap viene utilizzato quando è rimasta molta memoria libera?