Hello
을 인쇄 한 다음 Thread.sleep(3600*1000)
이 Linux에서 CentOS 5와 Ubuntu 10.04 모두에서 Linux (OpenJDK와 Sun JVM 모두)에서 가상 메모리를 사용하는 이유를 디버깅하려고합니다. 섬기는 사람. (각각 MediaTemple (dv) 및 (ve)).JMX 대 htop로보고 된 Java 메모리
그러나 더 구체적으로 VisualVM 또는 JConsole을 사용하여 연결하면 합리적인 메모리 사용법을 알 수 있습니다. 820KM 힙 (GC 이후); 8.4MB PermGen; 1136 클래스가로드되었습니다.
왜 불일치입니까?
많은 메모리를 사용하여 순전히 JVM을 실행하고 있습니까? 두 개의 Hello 응용 프로그램을 시작하여 메모리 사용량이 선형으로 조정되는지 알아보기 위해 시도했습니다.
사용 된 총 RAM이 78MB로 시작되었습니다. 하나의 hello 앱을 시작하면 메모리 사용량이 376MB가됩니다. 다른 hello 앱을 시작하면 총 RAM 사용량이 656MB가되므로 메모리가 잘 공유되지 않는 것 같습니다. (이 숫자는
(이 특정 숫자는 오픈 JDK와 가상 메모리 아니지만 일 6 JDK를 사용하여) comprable 제공하지만, 약간 낮은 메모리 사용량
코드 :
public class Hello {
public static void main(String[] args) throws Throwable {
System.out.println("HI");
Thread.sleep(3600 * 1000);
return;
}
}
명령 줄 : JMX와
java -Xmx32m -Xms32m Hello
:
java -Dcom.sun.management.jmxremote.port=8005 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx32m -Xms32m Hello
, 당신의 도움을 주셔서 감사합니다
Wiktor
설명 : Hello 용 RES 메모리는 21MB (예상대로)이며 SHR 메모리는 8MB입니다. 모두 합리적인 (잘, 자바에 대한 ;-)). 내 문제는 가상 메모리 사용량을 내 총 허용량 2GB에서 뺀 것입니다 ~ 18 Java 응용 프로그램을 실행해야합니다. – wmacura
'ulimit -v'를 사용하여 가상 메모리 사용을 조정하려고 시도했지만 약 400,000 (400MB)으로 설정하지 않으면 Java 응용 프로그램이 성공적으로 시작되지 않습니다. – wmacura
중요한 효과없이 -Djava.awt.headless = true (Sun과 OpenJDK 모두 사용)를 시도했습니다. – wmacura