2014-10-31 1 views
4

HTOP에서 JVM 프로세스가 실제로 차지하는 RAM 용량을 나타내는 RES 값 (상주 크기)을 볼 수 있습니다.Java로 현재 JVM의 실제 RAM 사용량 받기

이제 순수한 Java 만 사용하여 값을 얻고 싶습니다. 당신이 나에게 그것이 가능하지 않다고 말하면 괜찮습니다.

제가 htop에서 887M의 RES 값을 보여줍니다 응용 프로그램으로 만든 모든 시도를 설명하자, MemoryMXBean에를 통해 최선을 다하고 HeapMemory 및 비 Heapmemory 결합

  1. 모든 최선을 다하고 메모리를 추가하는 나에게 726M
  2. 를 제공을 모든 ManagementFactory.getMemoryPoolMXBeans의()() 나에게 737M
  3. runtime.totalMemory을 준다 내가 시도 할 수 밖에 무엇 515M

어떤 아이디어를 준다?

+0

당신에게 이것을 줄 순수 자바 기능은 없습니다. 당신은 당신이 언급 한 회계에 포함되지 않은 메모리 매핑 된 파일, 스레드 스택, 공유 라이브러리 및 직접 메모리를 잃어 버렸다고 가정 할 때, 어떤 가정과 함께 될지를 예측할 수 있습니다. 내가 쓰는 일종의 프로그램에서, 메모리 매핑 된 파일은 당신이 그것을 올바르게 사용한다면 다른 모든 것을 능가 할 수있다. –

+1

그래서 본질적으로 맨 위에있는 외부 도구를 사용하거나 JNI 마법을 사용해야합니다. – Traubenfuchs

+0

일반적으로 외부 프로그램에서 사용자의 사용량을 모니터링하게되지만이 번호를 기반으로 응용 프로그램 내에서 취할 조치는 무엇입니까? 참고 : 숫자가 낮 으면 좋지 않을 수 있으며 높은 숫자는 좋은 것일 수 있습니다. –

답변

3

Linux를 실행한다고 가정하면 /proc/self/status 파일을 읽고 VmRSS: 행을 찾으십시오.

또는 현재 프로세스의 포괄적 인 메모리 정보를 얻으려면 /proc/self/smaps을 구문 분석하십시오.

+0

이것은 유용한 답변이지만 순수 자바 (시스템 함수에 의존하고 창 아래에서 나눔)라고 생각하지 않습니다. – Pokechu22

+0

해결 방법으로는 충분합니다. – Traubenfuchs

+0

아마도 가장 깨끗하고 표준적인 방법 일 것입니다. Windows 지원을 채우기 위해 WMI COM 인터페이스 ([여기에서 설명 함] (http://stackoverflow.com/questions/4610063/recommended-libraries-howtos-for-using-wmi-with-java))를 사용할 수 있습니다. . – ssube

관련 문제