GNU/Linux >> Linux Esercitazione >  >> Linux

Aiutaci a interpretare OOM-Killer

Soluzione 1:

Memoria esaurita.

18 dicembre 23:24:59 ip-10-0-3-36 kernel:[ 775.566936] Memoria esaurita :Kill processo 4973 (java) punteggio 0 o sacrificio figlio

Dallo stesso registro (ps);

[ 775.561798] [ 4973] 500 4973 4295425981 2435 71 50 0 Java

4295425.981 è di circa 4 TB. e la riga total-vm:17181703924kB mostra circa 17 TB.

Puoi eseguire il debug della routine di allocazione della memoria? per quanto mi riguarda la tua applicazione ha avuto un brutto ciclo da qualche parte e deve prendere tutte le risorse disponibili e anche lo scambio disponibile.

Soluzione 2:

Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.214705]  shmem_fallocate+0x32d/0x440
Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.217182]  vfs_fallocate+0x13f/0x260
Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.219525]  SyS_fallocate+0x43/0x80
Dec 18 23:24:59 ip-10-0-3-36 kernel: [  775.221657]  do_syscall_64+0x67/0x100

Il tuo processo di richiesta sta tentando di richiamare fallocate sul filesystem shmem. Da una rapida ricerca su Google sembra che ZGC utilizzi fallocate per acquisire la memoria dell'heap iniziale dal filesystem shm e procede a utilizzare fallocate per espandere l'heap. Tale uso di fallocate syscall è piuttosto insolito, quindi o si tratta di un bug ZGC (come già sospettavi) o qualcos'altro sta perdendo molta memoria, il che causa il fallimento dell'espansione dell'heap.

Ti suggerisco di configurare ZGC per evitare ulteriori allocazioni di runtime (imposta Xms e Xmx allo stesso valore). Questo potrebbe non risolvere il tuo problema, se la perdita di memoria si verifica a causa di qualcosa di non correlato, ma almeno avresti maggiori possibilità di trovare il vero colpevole.

Nota che la tua configurazione complessiva è alquanto pericolosa:a ZGC apparentemente piace avere molta memoria contigua, ma se hai 190 GB di heap su una macchina da 240 GB di RAM, potrebbe non esserci una regione contigua sufficientemente grande per fallocate da. In tal caso ZGC ricadrà nel prelevare piccole regioni di memoria con ulteriori fallocate (vedi la descrizione della segnalazione di bug collegata) e il problema verrà oscurato di nuovo... Abilita il supporto di hugepages in JVM (normale hugepages , non enorme pagine trasparenti !) e preallocare le pagine enormi durante l'avvio (con l'argomento del kernel) — l'utilizzo di pagine enormi è comunque consigliabile per le dimensioni dell'heap.


Linux
  1. Come cancellare la cache di memoria in Linux

  2. Grep:Memoria esaurita?

  3. Come testare Oom-killer dalla riga di comando?

  4. Cos'è ioremap()

  5. Jenkins attivo (uscito)

Utilizzo della memoria di Linux

13 modi in cui puoi aiutare Linux

Che cos'è la NVM (memoria non volatile)?

Come cancellare la memoria di scambio in Linux

Utilizzo della memoria dei comandi TOP

Come leggere i messaggi syslog di oom-killer?