Linux: quale process ha consumato tutta la memory?

Abbiamo 4 GB sul nostro server Linux ma possiamo attualmente utilizzare solo ~ 1.8 GB per il nostro java-server, il primo process java elencato di seguito. (200 MB sono liberi in modo da poter utilizzare in modo massimo 1.6GB + 0.2GB)

La macchina si blocca quando usiamo di più. Quindi abbiamo specificato -Xmx1600m e -XX: MaxPermSize = 200m per limitare la RAM del server a 1.8GB. Ma abbiamo bisogno di più RAM! Dove è andata la RAM rimanente?

  • Prefisso dell'output standard prima di eseguire un command a un command
  • Terminator SSL ad alte performance su Linux
  • Microsoft Office documenti collaborazione - Open Source alternativa
  • È ansible ridurre in linea un volume EXT4 con LVM?
  • Come generare il carico di CPU sul server Linux
  • Come bind un indirizzo IPv6 non locale?
  • Ecco l'output del programma di top ordinato contro l'utilizzo della memory (tramite grande 'M'):

    Mem: 4083952k total, 3857856k used, 226096k free, 169320k buffers Swap: 2104504k total, 176k used, 2104328k free, 1939080k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28155 root 16 0 1835m 1.6g 7848 S 2 40.5 47:36.26 java 19609 root 16 0 45996 7052 3148 S 0 0.2 14:35.97 httpd2-prefork 6802 root 16 0 46132 5916 1932 S 0 0.1 0:00.09 httpd2-prefork 6866 root 15 0 46132 5916 1932 S 0 0.1 0:00.07 httpd2-prefork 

    Come vedete ci sono molti (e anche più) processi httpd2-prefork. Ma anche se accumulo i byte (25 * ~ 46KB = ~ 1MB) non sarà mai così grande.

    stampe free -m :

      total used free shared buffers cached Mem: 3988 3768 219 0 165 1894 -/+ buffers/cache: 1708 2279 Swap: 2055 0 2055 

    Dov'è il mio errore? Posso sintonizzare il server per dare più RAM al process java?

    BTW: non stiamo usando una macchina virtuale come qui

    Aggiornare

    Come è stato osservato nei commenti: è solo un kernel a 32 bit 🙁 (via uname -a), quindi posso usare solo alless 3 GB, ma il server stesso sembra essere 64 bit? modalità) nell'output?

     grep flags /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl cid cx16 xtpr ... 

    Ecco un'altra domanda molto simile.

    3 Solutions collect form web for “Linux: quale process ha consumato tutta la memory?”

    Ah, vedo che hai sbagliato come calcolare la RAM libera in Linux.

    Linux tende a utilizzare fortemente tutta la RAM memorizzando la memory. Invece di leggere l'elenco di directory dal disco each volta, memorizza le voci di directory nella RAM. Esegue la cache dei file frequentemente usati, per cui non è necessario caricare each volta dal disco. Nel caso in cui un process abbia effettivamente bisogno della RAM per il suo utilizzo, la cache verrà immediatamente sfrattata.

    Quindi la formula per calcolare la RAM effettivamente utilizzata è totale – (free + buffers + cached) , nel tuo caso 3988 – (219 + 165 + 1894) o in altre parole 3988 – 2278 . Ciò è 1710 megabyte di RAM in uso e 2278 megabyte di RAM per voi ancora da consumare.

    Non mi credi? Vedi, il tuo server non ha nemless alcun swap in uso. 🙂

    Ma naturalmente, un incidente di macchina – se si intende un block duro – è una cosa strana. Questo non dovrebbe realmente accadere. Sospetto un bastone RAM difettoso che viene accesso solo in caso di> 2 GB di RAM in uso.

    Ho solo delle opzioni di vecchia CPU, quindi sospetto che tu abbia solo una CPU a 32 bit, ma dovresti essere in grado di utilizzare tutti i 4 GB, anche se potrebbe essere necessario indagare su come farlo funzionare nel modo desiderato (potrebbe essere necessario abilitare PAE, per esempio).

    E vuoi dire che l'app java si blocca, o tutta la macchina? La macchina non deve crollare (anche se potrebbe divenire un po 'inadeguata).

    Solo una nota – c'è un errore nelle matematiche.

    (25* ~46KB = ~1MB) dovrebbe essere letto come (25* ~46000KB = ~1150MB) .

    La dimensione della risorsa è più importnte però in quanto fornisce una lettura più realistica della memory per process.

    (25*~5000KB = ~125MB)

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.