JVM 메모리 소비


9

낮은 메모리 시스템 (150-256Mb)에서 Tomcat을 실행하려고합니다. -Xmx64m (어쨌든 기본값이어야 함)으로 JVM을 시작하더라도 프로세스는 즉시 200Mb +를 차지합니다.

JVM이 왜 그렇게 많은 메모리를 필요로하는지, 또는 이것을 조정하는 방법이 있는지 궁금합니다. 낮은 메모리 소비로 다른 JVM이 태양보다 우수합니까? Tomcat과 함께 작동합니까?

답변:


5

힙 ( -Xms및로 지정) 외에도 힙 -Xmx이 아닌 영역을 포함해야합니다. 이들은 포함합니다

  • 32 비트 시스템에서 64MB, 64 비트 시스템에서 96MB 인 Perm Gen
  • JVM에 따라 20-40MB 사이의 코드 캐시
  • NIO 버퍼 영역 ( DirectByteBuffers가 나오는 곳), 처음에는 64MB

JVM 자체의 작업 공간도 수십 MB가 될 것입니다.

서버 클래스 시스템을 사용할 때 Sun JVM의 자동 크기 조정 도 알고 있어야 합니다 . 시간이 지남에 따라 서버 클래스 (2Gb 메모리, 둘 이상의 코어) 의 정의에 따라 일부 감가 상각이 발생하여 이제 대부분의 컴퓨터가 -server최적화 를 트리거 할 수 있습니다. 내 충고는 항상 이유를 생각할 수 없다면 항상 -Xms-Xmx설정 을 지정 하고 전달 -server하는 것입니다.


JVM이 예약 만하고 아직 사용하지 않는 가상 메모리도주의하십시오.
Steve Schnepp

사실 PermGen 및 코드 캐시와 같은 대부분의 세그먼트는 시작시 할당되지만 대부분의 커널은 필요할 때까지 해당 세그먼트에 페이지를 할당하지 않습니다.
Dave Cheney

1
정보 주셔서 감사합니다-메모리가 어디로 가고 있는지 설명합니다. 이 값을 변경할 수있는 방법이 있습니까? 각 섹션이 얼마나 많이 사용되는지 확인하는 방법이 더 좋습니다. Java 디버깅 / 모니터링 도구를 통해이를 수행 할 수 있는지 잘 모르겠습니다.
Draemon

1
pmap 또는 jmap을 사용하여 사용중인 다양한 세그먼트에 대한 아이디어를 얻을 수 있습니다. 공통 옵션 (및 기본값)은 대부분 java.sun.com/javase/technologies/hotspot/vmoptions.jsp에 나열되어 있습니다 . 자주 변경되며 OS (일반적으로 스택 크기)와 아치 (64 비트 OS는 일반적으로 더 큰 JVM 영역을 의미 함)의 차이가 있습니다.
Dave Cheney

3

-Xmx 옵션을 사용하면 JVM이 예약 하는 크기를 제한 합니다 ... JVM에 필요한 추가 자원이 있습니다 ...

"메모리에 감사합니다"*는 JVM이 메모리를 사용하는 방법을 설명하는 좋은 기사입니다 ...

그 외에도 IBM의 JVM을 사용해 볼 수 있지만 Tomcat과 함께 작동해야합니다. 무료 JVM 구현 중 일부가 작동하는지 모릅니다.

그럼에도 불구하고, 나는 메모리가 적은 기계가 당신을 도울 것이라고 생각하지 않습니다. 자바는 단지 메모리가 필요하다.

* 새로운 사용자는 하이퍼 링크를 제출할 수 없으므로 해당 기사를 직접 찾아봐야합니다. "메모리 ibm에 대한 감사"에 대한 Google의 첫 번째 기사입니다.


3
ibm.com/developerworks/java/library/j-nativememory-linux- "메모리에 감사합니다"기사 링크
StackKrish


0

내가 찾은 유용한 기술 중 하나는 JMX 모니터링을 사용하여 힙 대 permgen 공간에 사용되는 메모리 양을 정확히 확인하는 것입니다.

여기에 설명 된대로 Tomcat에서 JMX를 설정하십시오. http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html

그런 다음 JConsole (JDK 5 또는 JDK 6과 함께 제공)을 사용하십시오. 메모리 태그는 시간이 지남에 따라 메모리 소비를 추적합니다.

또한 웹앱의 소프트 재시작에주의하십시오. webapp를 다시로드하면 permgen 공간이 가비지 수집되지 않고 시간이 지남에 따라 쌓입니다. permgen 공간을 확보하려면 Tomcat을 완전히 중지 / 시작해야합니다.


JConsole 대신 VisualVM을 사용할 수도 있으며 JVM 내에서 메모리 문제를 찾을 때 더 자세한 정보를 제공합니다. 나는 문제를 찾기 위해 이것을 두 번 이상 사용해야했다.
Jeremy Bouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.