2012-01-10 10 views
10

Ho già cercato possibili soluzioni, come ad esempio How to monitor the computer's cpu, memory, and disk usage in Java?. Ma la memoria spesa in buffer e cache non è menzionata da nessuna parte?Come monitorare la memoria libera (compresi i buffer e la cache) in java?

Per esempio, su Linux, uscita di free -m: uscita

 
      total  used  free  shared buffers  cached 
Mem:   2011  1835  175   0  309  847 
-/+ buffers/cache:  678  1333 
Swap:   1998   0  1998 

ho già provato di sigar, che riporta la memoria libera come 175 MB.

La causa di questa domanda è come rilevare quando il sistema operativo ha poca memoria rimasta? Nell'output precedente di free -m, 175 MB sembrano piuttosto bassi; ma aggiungendo buffer e cache è evidente che la memoria libera è in realtà 1333 MB su 2 GB.

Per riepilogare, utilizzando java, è possibile ottenere il valore 1333 MB come valore della memoria libera? Come ho già detto, finora so solo come ottenere un valore di 175 MB.

+2

Poiché è probabile che la risposta sia specifica del sistema operativo, è possibile specificare quale sistema operativo (i) è necessario supportare. Solo Linux? – NPE

+1

Bene, il target è linux, ma preferirei se si trattasse di una soluzione multipiattaforma. Non ho la macchina Windows a disposizione per controllare, quindi non so che Windows riporti anche la memoria cache/buffer separatamente. Gli esperti di Windows sono benvenuti: D – bbaja42

+0

Da ciò che ho raccolto [qui] (http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html), basato su immagine che mostra Windows Task Manager, Windows ha anche la separazione della memoria totale, memoria libera e memoria cache. – bbaja42

risposta

1

Se si sta tentando di ottenere statistiche sulla memoria per il sistema operativo in sé (non la JVM), è possibile utilizzare JNA o JNI per rendere le chiamate API native specifiche della piattaforma direttamente al sistema operativo.

1

Non so su memoria libera direttamente, ma la JVM mantiene fagioli JMX che, a mio avviso, avere queste informazioni e di più: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

+0

Come illustrato [qui] (http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#summary), JMX può fornire le seguenti informazioni: dimensioni della memoria prese da JVM, totale memoria in OS e memoria libera (senza buffer e cache). Tutto bene. Ma ancora nessuna menzione della memoria spesa su buffer e cache. La memoria memorizzata nella cache può essere recuperata rapidamente se necessario. – bbaja42

+0

Se stai cercando di ottenere dettagli dettagliati della memoria spesa su particolari classi, pacchetti, ecc., Penso che tu abbia davvero bisogno di un Profiler e non solo di un monitor JMX. A meno che le classi che ti interessano abbiano i propri MBean che forniscono questa roba a JMX. –

+0

Sembra che stiamo vagando un po 'naturalmente. Non ho bisogno di alcuna memoria particolare spesa per la classe o il pacchetto java. Non java way, usando il comando di sistema ('free'), posso misurare la memoria libera per l'intero sistema operativo, tale misura mostra sia la memoria libera con e senza buffer/cache. Mi sto chiedendo come farlo con java. – bbaja42

1

Sono convinto che non sia possibile utilizzare l'API Java per ottenere il numero di cahce/buffer. Anche i ragazzi di SIGAR utilizzano wrapper JNI e chiamate di sistema native ...

Problemi correlati