2014-10-20 3 views
0

내가 아마존 EC2 작은 예 (1.7 GB RAM)에 데이터를 다음 최고 명령 보여주는 봄 응용 프로그램이 의심 그리고 나는 약 350 개의 클래스를 가지고 있으며, Maven이 의존하는 라이브러리가있다.봄 웹 응용 프로그램 메모리 프로파일 링은

free -m 

      total  used  free  shared buffers  cached 
Mem:   1656  1642   14   0   34  519 
-/+ buffers/cache:  1088  568 
Swap:   895   12  883 

메이븐 봄 종속성은이 -

Spring Core, Spring MVC, Spring Data , Spring Data Rest, , Spring 
Security, Spring HATEOAS, Spring Boot, Spring Oauth , Spring-Vaadin 

내가 총 277 MB의 복용 젠킨스이 메모리 풋 프린트를 비교했지만 내 테스트 응용 프로그램은 분명히 크게 아무것도 실행하지 않고 400메가바이트 소요 .

이 지점 코드에는 엔티티와 스프링 데이터 나머지 만 있습니다. 나는 힙 덤프 분석을했고, 그것은 최대 절전 모드는 응용 프로그램에서 최고 소비자 (촬영하여 jmap는)

Used heap dump 76.9 MB 
Number of objects 1,785,039 
Number of classes 12,546 
Number of class loaders 245 
Number of GC roots 2,589 
Format hprof 
MAT 쇼에서

가장 큰 최상위 도미네이터 클래스 로더의 보고서로 PID 15 메가 바이트했다 보여줍니다 -

org.eclipse.jetty.webapp.WebAppClassLoader @ 0xf00f8bb0 - 45 MB - 56.91% 
실행
  1. 은 일반적으로 봄 웹 응용 프로그램 라이브러리 종속성으로 추가됩니다 위의 경우 시작 단지 에 대한 4백메가바이트을 가지고 MVN 부두를 사용 를 실행합니까? 여기에 힙 점유율이 상위 명령하지만 jmap는에 의해 77메가바이트로 표시됩니다
  2. 는 모두를 기반으로 동일한 PID 5019 그것은 예측하기가 어렵다

답변

2
  1. 위한 것입니다으로 일치하지 않는 이유, 400 MB를 보여줍니다 라이브러리 자체만으로는 jvm 설정에 달려 있습니다. 응용 프로그램으로 무엇을합니까? 부트 스트랩 관련 코드가 메모리를 효율적으로 사용 했습니까? 400MB는 그 의존성을 가진 앱에 대해 꽤 정상적으로 들린다.

  2. 힙 점유율은 코드 및 라이브러리에서 사용되는 메모리의 일부일뿐입니다. jvm도 실행할 메모리가 필요합니다. 또한 메모리를 할당 할 때 운영 체제 자체가 복잡 할 수도 있습니다.

다양한 jvm 힙 메모리 설정을 조정할 수 있습니다 (http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html 참조). 꽤 일반적인 설정은 -Xmx -Xms -XX : MaxPermSize입니다.

힙 사용 그래프 (예 : visualvm)를 제공하는 jvm 프로파일 링 도구를 사용하고 힙 소비량이 올라가지 않아야하는지 (sawtooth 패턴을 찾으십시오), 그런 다음 얼마나 많이 측정 할 수 있는지 VM 매개 변수가 필요합니다.

관련 문제