백엔드 개발자 블로그

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

Java

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

backend-dev 2024. 5. 28. 10:14

자바 트러블슈팅(scouter를 활용한 시스템 장애 진단 및 해결 노하우)를 챕터 1을 요약한 내용입니다.

서비스 운영중 발생할 수 있는 다양한 문제들

  • 개발자 실수로 인한 시스템 오류
  • 장비에 대한 이상 현상
  • 외부 환경에 요인에 의한 시스템 다운(정전현상, 랜선뽑기)

 

어떻게 해결할 수 있을까?

가용 데이터가 확보되어 있을 경우

  • 서버 로그 확인
  • 서버 리소스 확인

가용 데이터가 확보되어 있지 않을 경우

  • 개인의 경험이나 직감을 활용
  • 단순히 서버 재시작(근본적인 문제 해결이 안되어 추후에 반복되는 오류 발생 가능성 증가)

 

어떤 종류의 문제점들이 있을까?

시스템이 느려요 종류

  • 전체 시스템이 항상 느린 경우 : 장비를 기동했을 때부터 느린 경우나 WAS를 시작했을 때부터 느린 경우
  • 특정 기능(화면)이 느린 경우
  • 특정 시간대(기간)에만 느린 경우
  • 특정 시간대(기간) + 특정 애플리케이션이 느린 경우
  • 특정 사용자만 애플리케이션이 느린 경우

 

시스템 응답이 없어요 종류

시스템의 응답이 없는 경우와 죽는 경우는 어찌 보면 같을 수도 있지만, 실상은 완전히 다르다.

  • 모든 애플리케이션이 응답하지 않는 경우
  • 특정 기능(화면)이 응답하지 않는 경우

개발자나 운영자의 입장

  • WAS 장비의 CPU 사용량은 10% 이내지만 시스템이 응답하지 않는 경우 : 시스템 내/외적인 원인 때문에 정상적인 기능을 못 하는 경우다
  • WAS 장비의 CPU를 하나 이상 100% 점유하면서 시스템이 응답하지 않는 경우 : 시스템 내적인 문제 때문에 정상적인 기능을 못 하는 경우다

 

예외가 계속 발생해요

예외가 계속 발생하는 경우를 상세하게 분류하면 다음과 같다.

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

 

시스템이 죽어요 종류

말 그대로 시스템의 프로세스가 죽는 경우를 말한다. pid가 시스템에서 사라지게 되는 경우가 여기에 속한다. 프로세스가 죽는 문제가 발생하면, 대부분은 시스템을 다시 시작한다. 만약 여유가 있을 경우에는 분석 작업을 실시한다. 뭔가 실마리를 남겨놓고 죽는 경우는 그나마 상황이 나은 편이다. 하지만 그러한 실마리도 없이 죽으면 할 수 있는 것이 없다. 기본적으로 JVM에서 제공하는 충돌 로그(fatal error log)파일이 생성되는데, 이를 분석하는 게 일반적이다.


발생 가능한 병목 지점들

성능을 저하시키는 원인들을 모두 병목지점이라 말한다. 한 시스템에서 성능이 안 좋거나 문제가 발생하는 원인을 제공하는 대상은 수도 없이 많다.

어디서 문제가 발생할 수 있을까?

  • 웹 서버
  • 웹 애플리케이션 서버
  • 각종 API 서버
  • DB 서버
  • 데몬 프로그램
  • 레거시 시스템
  • 기타 생각지도 못한 서버

문제의 원인이 될 수 있는 구성 요소

  • CPU
  • 네트워크
  • 메모리
  • 디스크 및 파일 서버
  • OS 커널

'Java' 카테고리의 다른 글

Thread에서 발생하는 문제들  (0) 2024.05.23
Scanner vs BufferedReader  (0) 2024.05.19
Generic  (0) 2024.05.16
Call by Value & Call by Reference  (0) 2024.05.14
Garbage Collector  (0) 2024.05.13