이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.

  • CPU Memory IO Network 관찰 지점에서 붙잡아야 할 핵심 판단 기준은 무엇인가?
  • 자원별 utilization, saturation, error를 나눠 본다라는 기준은 어떤 JVM/OS 신호로 확인되는가?
  • Java/Spring 코드에서 CPU Memory IO Network 관찰 지점 판단 기준은 어떤 장애 신호로 드러나는가?

개요

이 문서의 주제는 CPU Memory IO Network 관찰 지점이다. CPU, memory, disk I/O, socket을 같은 요청의 서로 다른 비용 축으로 연결한다.

먼저 붙잡을 기준은 다음 문장이다. 자원별 utilization, saturation, error를 나눠 본다. 이 문서는 이 기준을 Java/Spring 실행 흐름, JVM/OS 관찰 지표, 장애 판단 순서로 연결한다.

핵심 모델

  • 판단 기준: 자원별 utilization, saturation, error를 나눠 본다.
  • 성능 병목 분석은 증상을 하나의 계층에 빨리 귀속시키는 일이 아니라 원인 후보를 지워 가는 일이다.
  • CPU bound, memory pressure, disk I/O, socket queue, thread pool, connection pool은 서로 원인과 결과가 될 수 있다.
  • Load average는 CPU 사용률만이 아니라 runnable task와 uninterruptible I/O 대기 영향을 함께 받는다.
  • Pool 고갈은 원인일 수도 있고 downstream 지연의 결과일 수도 있다.
  • 장애 대응은 증거 확보, 유입 완화, 원인 격리, 근본 수정, 회고로 나눈다.

문서별 핵심 구분

  • CPU는 계산 포화, memory는 보관과 회수 압박, I/O는 대기, network는 연결 상태와 queue로 드러난다.
  • USE 관점에서는 utilization, saturation, error를 자원별로 나누어 본다.
  • 한 자원의 포화가 다른 자원의 대기열로 전파될 수 있다.

원리

CPU, memory, I/O, network는 각각 다른 질문을 던진다. CPU는 실행 가능한 작업이 core를 기다리는지, memory는 heap/RSS/swap/limit이 압박을 받는지, I/O는 읽기와 쓰기가 얼마나 기다리는지, network는 연결과 queue가 쌓이는지 본다.

USE 관점에서는 자원마다 utilization, saturation, error를 나눠 본다. CPU 사용률만 높다고 CPU 문제가 아니고, CPU 사용률이 낮다고 서버 자원 문제가 아닌 것도 아니다. disk I/O wait나 socket 대기가 thread를 묶어 두면 API latency는 충분히 커진다.

Load average는 CPU 사용률과 같은 말이 아니다. runnable task뿐 아니라 uninterruptible I/O 대기까지 반영할 수 있으므로 top, vmstat, iostat, thread dump를 같이 봐야 한다.

CPU Memory IO Network 관찰 지점 관점에서 중요한 점은 자원별 지표를 같은 시간축에 놓는 것이다. latency spike가 먼저인지, pool pending이 먼저인지, iowait가 먼저인지, GC pause가 먼저인지에 따라 완화 조치가 달라진다.

Java/Spring 연결

  • Spring Actuator와 Micrometer 지표는 JVM/애플리케이션 관찰의 시작점이지만 OS 지표 없이 병목을 확정하기 어렵다.
  • Tomcat thread, executor, HikariCP, Redis/client pool은 각각 다른 queue와 timeout을 가진다.
  • 느린 API 하나가 thread pool과 connection pool을 점유하면 정상 API까지 지연될 수 있다.
  • Retry, timeout, circuit breaker 설정은 장애 전파 경로를 만들거나 끊는다.
  • 운영 대시보드는 평균보다 saturation, queue, pending, p95/p99 중심으로 구성해야 한다.
  • Spring 코드 리뷰에서는 CPU Memory IO Network 관찰 지점 판단 기준이 어떤 thread, pool, timeout, resource 설정으로 드러나는지 확인한다.

코드와 설정 예시

date -Is
uptime
top -H -p <pid>
jcmd <pid> Thread.print
jcmd <pid> GC.heap_info
ss -s

예시는 특정 문법을 외우기 위한 것이 아니라 한 시각에 최소 지표 묶음을 남기기 위한 것이다. date -Is로 시각을 고정하고 CPU thread, heap, socket 요약을 같은 incident note에 붙여야 선후 관계를 비교할 수 있다.

관찰 명령

top -H -p <pid>
vmstat 1 5
iostat -xz 1 5
ss -s
jcmd <pid> GC.heap_info

CPU Memory IO Network 관찰 지점 관찰 명령은 결론이 아니라 가설 확인 도구다. 운영 중에는 반복 간격, 대상 PID, 수집 시각을 함께 남기고 출력이 큰 명령은 범위를 제한한다.

지표 해석

신호먼저 의심할 것다음 확인
CPU 사용률 높음CPU bound, GC, busy looptop -H, JFR, thread dump
load 높고 iowait 높음disk 또는 swap 병목iostat, vmstat, thread stack
pool pending 증가하위 시스템 지연 또는 pool 부족pool active/idle/pending
memory pressureheap leak, native, container limitGC, RSS, OOM log

CPU Memory IO Network 관찰 지점에서는 핵심 신호와 보조 지표를 같은 시간축에서 맞춘다. 먼저 변한 신호와 뒤따라 포화된 신호를 분리해야 원인과 결과를 구분할 수 있다.

장애 상황에서 보는 순서

  1. 증상 시간을 분 단위로 고정한다.
  2. CPU, memory, disk, socket, JVM, pool 지표를 같은 시간대에 모은다.
  3. 가장 포화된 자원과 가장 먼저 변한 지표를 구분한다.
  4. 임시 완화는 유입 제한, 비필수 작업 중지, timeout 정렬부터 검토한다.
  5. 근본 해결은 코드, 설정, capacity, 운영 절차 중 어디인지 나눈다.

이 순서는 CPU Memory IO Network 관찰 지점 후보를 빠르게 좁히기 위한 기본 루틴이다. 결론을 내리기 전에는 애플리케이션 증거와 JVM/OS 증거를 최소 한 번 이상 맞춘다.

실전 팁

  • CPU, memory, disk, socket의 최소 명령 세트를 incident note에 고정한다.
  • 각 자원의 정상 기준선을 먼저 저장한다.
  • latency spike와 자원 지표 spike의 선후 관계를 본다.
  • 자원별 숫자보다 endpoint 영향과 연결해 해석한다.
  • 대시보드에는 saturation 지표를 평균 사용률보다 앞에 둔다.

주니어 팁

  • CPU Memory IO Network 관찰 지점 주제는 용어 정의보다 장애 때 어떤 증거로 확인할지까지 연결해 익힌다.
  • 정상 상태에서 이 문서의 관찰 명령을 실행해 CPU Memory IO Network 관찰 지점 기준선을 남긴다.
  • 장애 시에는 CPU Memory IO Network 관찰 지점 신호가 평소 기준선에서 벗어난 시각과 방향을 먼저 본다.

시니어 팁

  • CPU Memory IO Network 관찰 지점 주제의 영향이 pool, queue, retry, timeout으로 번지는 경로를 설계 리뷰에 포함한다.
  • CPU Memory IO Network 관찰 지점 runbook에는 실행 명령, 정상 범위, 해석 기준, 금지할 대응을 같이 둔다.
  • CPU Memory IO Network 관찰 지점 판단이 container, LB, 다중 인스턴스 환경에서도 같은 의미인지 확인한다.

Guru급 팁

  • CPU Memory IO Network 관찰 지점 주제는 단일 snapshot보다 변화 방향이 중요하다. 같은 명령을 간격을 두고 실행해 상태가 증가, 유지, 회복 중 어디인지 본다.
  • 고급 도구는 CPU Memory IO Network 관찰 지점 가설을 좁힐 때만 사용하고 기본 지표와 모순되는지 먼저 확인한다.
  • CPU Memory IO Network 관찰 지점 조치 후에는 CPU, memory, socket, disk, pool 중 다음 포화 지점이 어디로 이동했는지 확인한다.

위험 신호!

  • CPU 사용률이 낮다는 이유로 서버 자원 문제를 배제한다.
  • memory free만 보고 page cache와 swap을 보지 않는다.
  • disk I/O wait를 단순 idle로 오해한다.
  • network connection state를 보지 않고 HTTP 상태코드만 본다.
  • 자원 지표를 서로 다른 시간대에서 비교한다.
  • 사용률만 보고 saturation과 error를 보지 않는다.
  • Load average를 CPU 사용률과 같은 의미로 해석한다.

확인 질문

확인 질문

  • CPU Memory IO Network 관찰 지점 주제를 장애 중 확인할 때 Application 로그만으로 부족한 이유는 무엇인가?
    • 로그는 코드 경로를 보여 주지만 CPU Memory IO Network 관찰 지점의 JVM/OS 자원 상태, 대기 위치, 포화 방향은 별도 지표로 확인해야 하기 때문이다.
  • CPU Memory IO Network 관찰 지점 관련 설정이나 pool 크기를 바꾸기 전에 확인할 것은 무엇인가?
    • 먼저 변한 신호, 하위 자원 capacity, 변경이 완화인지 증폭인지 판단할 기준을 CPU Memory IO Network 관찰 지점 지표로 확인해야 한다.
  • CPU Memory IO Network 관찰 지점 재발을 막기 위해 장애 기록에 무엇을 남겨야 하는가?
    • 발생 시간, 영향 범위, 사용한 명령, CPU Memory IO Network 관찰 지점 핵심 지표, 원인 판단, 완화 조치, 근본 수정, 남은 리스크를 남긴다.

참고 문서