2012-01-10 13 views
10

Zaten How to monitor the computer's cpu, memory, and disk usage in Java? gibi olası çözümleri aradım. Ancak arabellek ve önbellekte harcanan bellek herhangi bir yerde belirtilmiyor mu? linux üzerinde ÖrneğinJava'da boş bellek (arabellek ve önbellek dahil) nasıl görüntülenir?

, free -m çıktısı: sigar ait

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

Zaten test ettik çıkış, 175 MB olarak boş bellek bildirir.

Bu sorunun nedeni, OS'nin çok az belleği kaldığında nasıl algılayacağınızdır? Önceki çıktıda free -m, 175 MB oldukça düşük görünüyor; Ancak, arabellek ve önbellek ekleyerek, boş belleğin aslında 2 GB'lık 1333 MB olduğu açıktır.

Özetle, java kullanarak, 1333 MB boş hafıza değeri olarak almak mümkün mü? Daha önce de belirttiğim gibi, şimdiye kadar sadece 175 MB değerinin nasıl alınacağını biliyorum.

+2

Yanıtın OS'ye özgü olması muhtemel olduğundan, hangi işletim sistemlerini desteklemeniz gerektiğini belirtmek isteyebilirsiniz. Sadece Linux? – NPE

+1

Eh, hedef linux, ancak bir çapraz platform çözümü ise tercih ederim. Pencereyi kontrol etmek için elimde makinem yok, bu yüzden pencerelerin önbelleğe alınmış/arabelleğe alınmış belleği ayrı ayrı rapor ettiğini bilmiyorum. Windows uzmanları bekleriz: D – bbaja42

+0

Topladığımdan [buradan] (http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html) Windows görev yöneticisi gösteren resim, Windows ayrıca toplam bellek, boş bellek ve önbelleğe alınmış bellek ayrımı var. – bbaja42

cevap

1

sen (OS kendisi için bellek istatistiklerini değil almaya çalışıyorsanız JVM), platforma özgü yerel API çağrılarını doğrudan işletim sistemine dönüştürmek için JNA veya JNI'u kullanabilirsiniz.

1

bu bilgileri ve varsa, doğrudan serbest bellek hakkında bilmiyorum, ama JVM inanıyorum JMX fasulye tutar daha: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

+0

Burada gösterildiği gibi (burada) (http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#summary), JMX aşağıdaki bilgileri verebilir: JVM tarafından alınan bellek boyutu, toplam OS'de bellek ve boş hafıza (arabellek ve önbellek olmadan). Hepsi iyi. Ama yine de tamponlar ve önbellek üzerinde harcanan hafızadan bahsedilmiyor. Önbelleğe alınmış bellek gerektiğinde hızla geri alınabilir. – bbaja42

+0

Belirli sınıflar, paketler vb. Için harcanan hafızanın ince ayrıntılarını almaya çalışıyorsanız, aslında bir Profiler'e ihtiyacınız olduğunu ve sadece bir JMX monitörüne ihtiyacınız olmadığını düşünüyorum. İlgilendiğiniz sınıfların, bu şeyleri JMX'e sağlayan kendi MB'leri olmadıkça. –

+0

Görünüşe göre biraz rota çiziyoruz. Java sınıfı veya paketinde harcanan herhangi bir belleğe ihtiyacım yok. Java yolu, sistem komutunu ('' '' ') kullanarak, tüm işletim sistemi için boş belleği ölçebilirim, bu tür ölçümler, arabelleğe/arabelleğe sahip olmayan ve içermeyen boş belleği gösterir. Java ile nasıl yapılacağını merak ediyorum. – bbaja42

1

Cahce/buffer sayısını elde etmek için Java API kullanmanın mümkün olmadığına inanıyorum. SIGAR'daki çocuklar bile JNI sarmalayıcıları ve yerel sistem çağrılarını kullanırlar ...

İlgili konular