본문

와탭모니터링
모니터링에서 주목해야 할 지표

작성일 2021년 10월 26일

 연일 계속 추워지는 날씨에 자켓이 아닌 코트를 꺼내 입은 베키가 10월 월간와탭으로 다시 돌아왔습니다. 가을 날씨를 조금 느낄 찰나에 바로 겨울이 다가온 기분이라 내심 아쉽더라구요. 날씨는 예측하지 못하지만, 와탭 모니터링 서비스에서는 주목해야 할 지표를 보고 문제점을 미리 확인해 대비할 수 있는데요.

이번 달 월간와탭에서는 와탭 서비스의 운영을 책임지는 규석님이 애플리케이션 모니터링과 서버 모니터링 환경에서 주목해야 하는 지표를 소개하고, 소개된 지표를 어떻게 활용할 수 있는지 소개해 드릴 예정입니다.

10월 월간와탭에서 확인할 수 있는 내용은?

💡 애플리케이션 모니터링과 서버 모니터링에서 주목할 지표를 소개하고 활용 방법을 안내해 드립니다.

모니터링에서 주목해야 할 지표

애플리케이션 모니터링 : Heap 메모리 지표와 GC 지표

자바 애플리케이션에서 주목해야할 지표는 Heap 메모리 지표와 GC지표입니다.

JVM(자바 가상머신)은 프로그램을 실행하기 위해 메모리에 데이터 저장 공간을 할당합니다. 메모리 공간은 크게 3가지 영역으로 분류됩니다. Static, Stack, Heap 영역입니다. 객체(인스턴스), 배열 등 주요 데이터는 Heap 영역에 저장됩니다.

GC (Garbage Collection)란 JVM(자바 가상머신)이 더 이상 필요하지 않은 객체를 Heap 영역에서 해제하는 동작입니다. 덕분에 자바에서는 개발자가 메모리를 코드로 명시적으로 해제하지 않아도 됩니다.

Heap 메모리나 GC에 대한 지표는 애플리케이션 모니터링에서 [분석] → [매트릭스 차트] → [애플리케이션 카테고리]를 선택해서 지표 차트를 추가해서 시간대 별로 비교 분석이 가능합니다.

메트릭스 차트

Heap 사용량이 부족한 경우 GC가 자주 일어나 CPU를 과도하게 점유하게 됩니다.

Heap 사용량이 부족할 때의 패턴과 정상적인 Heap 사용량 패턴은 다음과 같습니다.

메트릭스 차트

정상적인 힙 사용량 패턴은 GC 로 인해 오르락 내리락을 반복합니다.

GC 가 올바르게 수행되지 않는 비정상적인 상황에서는 힙 사용량이 항상 높게 유지됩니다.
그림에서는 힙 사용량이 점차 증가하다 최대 사용량 부근에서 유지되는 것을 확인 할 수 있습니다.

힙 사용량이 점차 증가하다 최대 사용량 부근에서 유지되는 비정상 힙 패턴을 보여주는 시간대 GC 지표와 CPU 사용량을 확인하면 GC 건수와 GC 시간이 증가하며 CPU 사용량이 급격히 증가하는 것을 확인할 수 있습니다.

메트릭스 차트

위 지표에서 특히 더 주목할 점은 Old Generation GC가 최대 8건으로 매우 많아졌다는 것입니다.

메트릭스 차트

Old Generation GC(Full GC)는 STOP-THE-WORLD를 동반합니다.

STOP-THE-WORLD는 말 그대로 VM의 모든 스레드를 멈추기 때문에 이 시간동안 애플리케이션은 일을 할 수 없습니다. GC가 완료된 이후에 중단되었던 작업을 다시 시작하기 때문에 애플리케이션에 지연이 발생합니다.

JVM Heap 메모리는 논리적으로 Young Generation 영역과 Old Generation 영역 두 부분으로 나뉩니다. Young 영역은 새로운 객체가 생성되는 곳입니다. Young 영역이 가득 차면 Minor GC가 동작합니다.

Young 영역에서 살아남은 객체는 Old Generation 영역으로 복사됩니다. Old Generation 영역에서 객체가 사라질 때 Old Generation GC가 발생한다고 말합니다. Major GC 또는 Full GC 역시 같은 의미입니다.

위 패턴이 보인다면 다음과 같은 대안을 생각 할 수 있습니다.

Heap 최대 사용량 증가

- jvm 옵션에서 -Xmx 값을 증가시킵니다.

애플리케이션에 적합한 GC 적용

- Serial GC, Parallel GC, CMS GC, G1GC 등 애플리케이션에 적합한 GC를 사용합니다.

보다 근본적인 해결은 애플리케이션을 수정하는 것 입니다.

Heap을 적게 사용하도록 애플리케이션 최적화

- Heap 최대 사용량 증가와 GC로 해결이 안되면 애플리케이션 자체를 최적화해야 합니다.

- Heap dump를 이용하여 어느 메소드가 메모리를 많이 점유하는지 확인할 수 있습니다.

참고 자료) JAVA 메모리 사용량 테스트 ,이건 해보셨나요?

Old Generation GC의 발생 시간이 길어지면 heap 메모리가 줄어드는 순간에 트랜잭션 분포도 (히트맵)의 트랜잭션 개수가 급격히 줄어드는 것으로 확인 가능합니다.

히트맵 트랜젝션

서버 모니터링 : CPU Usage 지표

애플리케이션에는 이상이 없더라도 운영체제 등의 이슈로 인해 서버가 느려지는 현상이 발생할 수 있습니다. 이때 1차로 주목해야 하는 지표는 CPU Usage 입니다.

Disk I/O 또는 메모리 부족

일반적인 경우 메모리 부족 또는 과도한 Disk I/O 가 발생하는 경우 CPU 사용량이 급등합니다. 따라서 CPU 지표가 급격하게 증가한 경우 원인을 파악해야 합니다. 이때 [서버 목록] → [서버 상세정보]에서 왼쪽에 위치한 지표들을 살펴보면 도움을 받을 수 있습니다.

특정 지표가 장애 시점 이전과 비교하여 과도하게 높은 점유율을 보이고 있다면 해당 지표를 원인으로 추정해볼 수 있습니다.

서버 상세정보
높은 CPU Steal 수치

클라우드 환경의 경우 CPU Steal 지표를 유심히 확인해야 합니다. 해당 하이퍼바이저의 cpu 성능 한계와 관련이 깊기 때문입니다. CPU Steal 지표가 궁금하시면 CPU 그래프에 마우스 커서를 올려보세요.

서버 상세정보

자세한 내용은CPU Steal Time의 원인과 대책에서 확인해주세요.

CPU Steal 이란 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안 가상 CPU가 실제 CPU를 기다리는 시간을 백분율로 표시한 값입니다.
가상 환경에서 동작하는 VM(Virtual Machine)은 같은 호스트에 있는 다른 인스턴스와 리소스를 공유합니다. CPU Steal 지표를 통해 VM의 CPU가 호스트 로부터 자원을 할당받기 위해 얼마나 대기하고 있는지 알 수 있습니다.

특정 프로세스의 CPU 과점유

어떤 프로세스가 CPU를 얼마나 점유하고 있는지 궁금하시면 오른쪽 프로세스 탭을 확인해 보세요.

서버 상세정보

이때 상단 오른쪽에서 프로세스를 정렬할 수 있습니다.

서버 상세정보

애플리케이션과 무관한 특정 프로세스가 서버 자원을 과도하게 소비할 경우 해당 프로세스를 종료해보세요. 서버에 부하가 줄어듭니다. 애플리케이션이 느려지는 현상을 해결할 수 있습니다.

만약 애플리케이션이 서버에 무리가 될 정도로 자원을 소비하는 경우 서버 자원 증가를 고려할 수 있습니다.

마무리

10월 월간 와탭은 애플리케이션 모니터링과 서버 모니터링을 사용하면서 확인하면 좋은 지표를 소개해 드렸는데요. 오늘 소개해 드린 내용과 같이 보면 좋은 콘텐츠를 함께 공유 드려요 🙋🏻‍♂️🙋🏻‍♀️

[WhaTip : 와탭이 알려주는 꿀팁] Heap 메모리 차트 분석하기

[WhaTip : 와탭이 알려주는 꿀팁] 메모리 릭, 그리고 Heap 덤프 분석

서비스 성능관리는 와탭 애플리케이션 모니터링으로!
와탭 무료로 시작하기
정규석[email protected]
DevOps TeamDevOps Engineer

지금 바로
와탭을 경험해 보세요.