본문 바로가기
server

WAS 속도 느림 현상

by Younji! 2017. 2. 1.


WAS에 속도 느림에는 여러가지 이유가 있겠지만, 


원인 파악을 하는데 어떤 식으로 진행을 하였는지 간단하게 적어보겠다.


제일 먼저 CPU 점유율을 확인하였다.


top



실제로 CPU가 굉장히 많이 점유하고 있었다. 


문제가 발생했다는 것은 파악하였지만 어떤 원인인지 파악하지 못해 jstat / jmap / jstack으로 GC 및 힙, 스레드 상태를 확인하고 덤프파일로 생성하였다. 


GC는 Gabarge Collection으로 메모리 관리 기법 중 하나다. 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.


GC의 경우 -verbose옵션으로 log 파일을 생성해줄 수 있다.


B.2.3 -verbose:gc Option

The -verbose:gc option enables logging of garbage collection (GC) information. It can be combined with other HotSpot VM specific options such as -XX:+PrintGCDetails and -XX:+PrintGCTimeStamps to get further information about the GC. The information output includes the size of the generations before and after each GC, total size of the heap, the size of objects promoted, and the time taken.


jstat - Java Virtual Machine Statistics Monitoring Tool

jmap - Memory Map

jstack - Stack Trace


서비스 실행 중에 덤프를 뜨는 것도 많은 자원을 소모하기 때문에 주의해야 한다.


위와 같은 사항을 확인해보면서 GC 프로세스에 대해 다시 확인해보았다.



Young Generation : 새로운 객제들이 할당되는 곳이다. 이 영역이 차게 되면 Minor GC가 발생한다. 사용할 수 없는 객체들로 꽉 차게 되면 매우 빨리 수집되어지고 몇몇 남은 객체들은 old generation으로 옮겨가게 된다.

Old Generation : 살아남은 객체들을 저장하는 곳이다. Major GC를 발생시키는데 모든 라이브한 객체들을 포함하고 있기 때문에 꽤 느리다.

Permanent Generation : 애플리케이션에서 사용된 메소드나 클래스를 기술한 JVM에 의한 메타데이터를 포함하고 있다. 


번역 및 정리된 내용이 http://d2.naver.com/helloworld/1329.

Heap Dump를 바이너리 파일로 생성하여 힙 덤프 분석 툴인 Eclipse MAT을 활용하였다. 




Leak Suspect를 확인해보니 OracleTimeoutPollingThread가 발생하여 다른 의심 사항들도 복합적으로 일어나 OOM도 같이 발생한듯 하다.





SocketTimeOutException의 경우 default 0으로 해당 예외사항이 발생했을 경우 무한 대기 상태에 빠질 수 있다하여 시간을 지정해주었다.


일단 이렇게 경과를 두고 봐서 해결이 됐는지 확인을 해야겠다.



참고 URL : http://d2.naver.com/helloworld/6043

   http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbmtm

   http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

https://ko.wikipedia.org/wiki/%EC%93%B0%EB%A0%88%EA%B8%B0_%EC%88%98%EC%A7%91_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)






'server' 카테고리의 다른 글

fluentd와 함께하는 검색 데이터 수집  (0) 2019.06.26
Redisson  (0) 2019.06.26
ModelMapper  (0) 2019.06.25
Lambda@Edge를 활용한 이미지 리사이징  (1) 2019.03.24
로그 관리를 위한 logrotate.d  (0) 2016.12.16

댓글