자바 트러블슈팅 - PART1. 자바에서 발생 가능한 문제점들

2021. 11. 16. 16:08책읽고정리하기

CHAPTER1. 자바 기반의 시스템에서 발생할 수 있는 문제들

1. 시스템이 느려요

  • 전체 시스템이 항상 느린 경우
  • 특정 기능(화면)이 느린 경우
  • 특정 시간대(기간)에 전체 애플리케이션이 느린 경우
  • 특정 시간대(기간)에 특정 애플리케이션이 느린 경우
  • 특정 기능(화면)이 점점 느려지는 경우
  • 특정 사용자만 애플리케이션이 느린 경우

 

트러블슈팅이 가장 쉬운 경우는 '특정 기능(화면)이 느린 경우' -> 애플리케이션 흐름을 따라가면서 원인을 찾으면 된다.

트러블슈팅이 가장 어려운 경우는 '특정 시간대(기간)에 특정 애플리케이션이 느린 경우' -> 재현이 쉽지 않다.

대부분의 경우는 이후에 나오는 scouter의 XLog와 스레드 상황을 확인하면 원인을 찾을 수 있다.

2. 시스템이 응답이 없어요("시스템이 행이 되었다.")

  • WAS 장비의 CPU 사용량은 10% 이내지만 시스템이 응답하지 않는 경우
  • WAS 장비의 CPU를 하나 이상 100% 점유하면서 시스템이 응답하지 않는 경우

대부분 socuter의 스레드 목록이나 스레드를 분석하거나 메모리의 상황을 분석하여 원인에 접근할 수 있다.

3. 예외가 계속 발생해요

  • 모든 사용자가 특정 기능을 수행하면 예외가 발생하는 경우
  • 특정 사용자의 특정 기능에서만 예외가 발생하는 경우
  • 특정 시간대에만 전체 애플리케이션에 예외가 발생하는 경우
  • 특정 시간대에 특정 애플리케이션에 예외가 발생하는 경우

 

크게 네 가지로 분류한 문제점들 중에 가장 쉬운 케이스.

시스템 로그를 적극 활용하자! (여기서 시스템 로그는 개발자가 System.out.println() 메서드를 호출하여 출력하는 로그나 예외발생시 printStackTrace()와 같은 로그를 말함.)

만약 시스템로그가 없다면 scouter의 XLog를 활용하면 예외가 발생한 부분을 찾을 수 있다.

4. 시스템이 죽어요("프로세스가 다운되었다.")

  • 실마리가 있는 경우
  • 아무 실마리도 없이 죽는 경우

 

대부분은 기도하면서 시스템을 재시작한다.

만약 서버의 대수가 많고 시간적 여유가 있다면 해당 서버를 서비스에서 제외한 후 분석 작업을 실시하는 경우도 있다.

서버가 죽을 때 뭔가 실마리를 남겨 놓고 죽으면 다행이다. 실마리도 없으면 할 수 있는 것이 없다..

메모리로 인해서 시스템이 죽는 경우 실마리를 남기는 방법에 대해 후에 설명한다.