진짜 개발자
본문 바로가기

Application Knowhow

ApplicationKnowhow/Server - 성능 개선기 3 (Jvm Heap 설정)

728x90

Server의 Memory 공간은 충분해 !(?)

최초 테스트 시, 2CPU, 1GB Mem 의 자원으로 테스트를 진행했습니다.

 

또 테스트를 하는 동안 memory는 부족한 적이 없었습니다(그런줄로 믿고 있었습니다). 항상 htop으로 appServer의 cpu와, mem을 모니터링을 한 결과 memory는 사용률이 70%정도도 안되었기 때문에 memory가 부족하지는 않은 것으로 생각을 하고 CPU만을 scale up하여 테스트를 진행했었습니다.

 

 

visualVM으로 Heap영역을 확인을 해보아도 maxHeap Size 250MB이며 usedHeap size는 30MB 정도로 아직 여분이 많이 남아있었기 때문에 더더욱 아닐 것이라고 생각을 했습니다. (저 그래프를 처음 볼 당시에는 현재 heap의 size가 35MB 임을 알지 못했습니다.)

 

 

그런데, GC가 자주 발생하는 것을 VisualVM 을 통해서 알 수 있었고, 이 때문에 Heap의 사이즈가 부족한 것인가? 라는 생각을 하게 되었습니다.

 

 

다시, Heap 영역을 자세히 모니터링하기로 하고 그래프를 유심히 살피던중, 주황색 영역이 증가하는 것을 확인할 수 있었습니다. 증가한 주황색 영역이 무엇인지 확인을 다시 해보니, 현재 heap에 할당된 메모리 크기임을 알 수 있었고,

 

 

                                      Memory 1GB                                                                                                   Memory 2GB                                       

TPS역시 60 TPS 까지 증가하는 것을 확인할 수 있었습니다.

 

Server의 Memory 크기를 늘려보자.

앞선 모니터링의 결과로 Server의 Memory가 충분하지 않음을 알 수 있었습니다. 따라서, Server의 Memory를 2GB로 증가시키고 다시 테스트를 해보았습니다.

 

기존 1GB Mem의 경우 40~60TPS 에서 2GB로 Scale up한 뒤, 120~150 TPS까지 증가한 것을 확인할 수 있었습니다.

 

 

아직 부족하다..

1GB Memory의 경우 Heap의 Size가 한번 증가한 이후로, 사용되는 Heap의 크기가 어느정도 안정화 된 것으로 보였습니다.

 

2GB로 Memory를 Scale Up한 뒤, Heap의 Size가 100MB정도 할당되었고, 사용되는 Heap도 80MB 정도로 더 많은 Heap이 필요하지 않은 줄 알았습니다.

 

 

그런데, 아직도 GC가 빈번하게 발생함을 확인할 수 있었습니다.

 

 

아니나 다를까 잠시 후, Heap Size가 증가하는 것을 확인할 수 있었고, 이후 TPS가 우상향으로 증가하는것을 관찰할 수 있었습니다.

 

 

Server Memory를 더 늘려야하나 ?(Xms, Xmx 설정)

Server의 Memory를 더 증설해야 하나 고민을 하고 있었는데, 생각해보니, Heap의 크기가 더 증가할 수 있다는 것이 떠올랐고, OS에 아직 여분의 Memory가 남아있었기 때문에 Heap에 더 많은 Memory를 할당하도록 설정이 가능할 것이라고 생각이 들었습니다.

 

 

Max Heap 가 존재하는 것으로 보아, 최초 Heap size 설정이 가능할 것이라고 생각이 들었습니다.

또한 최초 HeapSize를 여유롭게 설정하여 GC 발생 빈도를 줄이고, Heap Size가 동적으로 조절되는 오버헤드를 줄여 서버의 성능을 높일 수 있을 것이라고 생각이 들었습니다.

 

 

Xms, Xmx

Xms 설정을 하면 최초 JVM에 할당되는 Heap을 설정할 수 있음을 알게 되었고, 512MB를 할당하도록 했습니다.

 

 

GC 회수 감소

Heap의 크기를 512MB로 여유롭게 할당한 결과, GC가 발생하는 회수가 드라마틱하게 감소한것을 확인할 수 있었습니다.