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?

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.

  • Come posso riservare la RAM sulla partizione host Hyper-V 2012 solo per i VM?
  • Quale modo migliore per configurare la memory per un Oracle RAC 11g R2?
  • Dell 2950 Ram Upgrade
  • Memoria misteriosa in Linux
  • Come possono i bytes privati ​​di un process essere significativamente inferiori al suo effetto sulla carica di impegno del sistema?
  • Quanta memory richiede il mio SQL?
  • MySQL (MariaDB) si blocca spesso
  • memtest86 + crash sul server
  • 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.