2012-01-10 12 views
10

Szukałem już możliwych rozwiązań, takich jak How to monitor the computer's cpu, memory, and disk usage in Java?. Ale pamięć spędzona w buforach i pamięci podręcznej nie jest nigdzie wspomniana?Jak monitorować wolną pamięć (w tym bufory i pamięć podręczną) w java?

Na przykład, w systemie Linux, wyjście free -m:

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

Ja już testowany wyjście sigar, który raportuje jako wolnej pamięci 175 MB.

Przyczyna tego pytania brzmi: jak wykryć, kiedy system operacyjny ma mało pamięci? W poprzednim wydaniu free -m, 175 MB wydaje się dość niskie; ale przez dodanie buforów i pamięci podręcznej jest oczywiste, że wolna pamięć to faktycznie 1333 MB z 2 GB.

Podsumowując, używając java, czy można uzyskać wartość 1333 MB jako wartość wolnej pamięci? Jak już wspomniałem, do tej pory wiem tylko jak zdobyć wartość 175 MB.

+2

Ponieważ odpowiedź może być zależna od systemu operacyjnego, możesz chcieć określić, który system operacyjny (OS) musisz obsługiwać. Tylko Linux? – NPE

+1

Cóż, celem jest linux, ale wolałbym, jeśli jest to rozwiązanie wieloplatformowe. Nie mam pod ręką komputera z systemem Windows, aby sprawdzić, więc nie wiem, czy okna również raportują pamięć podręczną/buforowaną osobno. Eksperci od systemu Windows są mile widziani: D – bbaja42

+0

Z tego, co zebrałem [tutaj] (http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html), na podstawie obrazek przedstawiający menedżera zadań Windows, Windows ma również oddzielną pamięć całkowitą, wolną pamięć i pamięć podręczną. – bbaja42

Odpowiedz

1

Jeśli próbujesz uzyskać statystyki pamięci dla samego systemu operacyjnego (nie JVM), możesz użyć JNA lub JNI, aby wywoływać macierzyste interfejsy API dla platformy bezpośrednio w systemie operacyjnym.

1

Nie wiem, o wolnej pamięci bezpośrednio, ale JVM utrzymuje JMX fasoli, które, moim zdaniem, mieć tę informację i więcej: http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html

+0

Jak pokazano [tutaj] (http://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html#summary), JMX może podać następujące informacje: wielkość pamięci pobranej przez JVM, suma pamięć w systemie operacyjnym i wolna pamięć (bez buforów i pamięci podręcznej). Wszystko dobrze. Ale wciąż nie wspomina się o pamięci przeznaczonej na bufory i pamięć podręczną. Pamięć buforowana może zostać szybko odzyskana w razie potrzeby. – bbaja42

+0

Jeśli próbujesz uzyskać drobnoziarniste szczegóły pamięci spędzonej na poszczególnych klasach, paczkach itp., Myślę, że naprawdę potrzebujesz Profiler, a nie tylko monitora JMX. O ile klasy, którymi jesteś zainteresowany, mają swoje własne MBeans dostarczające te rzeczy do JMX. –

+0

Wygląda na to, że trochę zbłądziliśmy. Nie potrzebuję żadnej konkretnej pamięci spędzonej na klasie lub pakiecie Java. W trybie bez java, używając polecenia systemowego ("free"), mogę zmierzyć wolną pamięć dla całego systemu operacyjnego, takie pomiary pokazują zarówno wolną pamięć zi bez buforów/pamięci podręcznej. Zastanawiam się, jak to zrobić z Javą. – bbaja42

1

Jestem przekonany, że nie jest możliwe użycie Java API do uzyskania numeru cahce/buforów. Nawet faceci z SIGAR używają wrapperów JNI i natywnych wywołań systemowych ...

Powiązane problemy