← 문제 라이브러리
Linux 중급 16분

load average는 40인데 CPU는 한가함: 업무 시간에 API가 느려짐

오전 11시부터 주문 API 응답이 평소보다 몇 배 느려졌습니다.

검수된 문제무료
시나리오

오전 11시부터 주문 API 응답이 평소보다 몇 배 느려졌습니다. 서버(8코어)의 load average가 40을 넘어 모두가 CPU가 부족하다고 판단했고, 인스턴스 크기를 두 배로 올리자는 의견이 나왔습니다. 그런데 top을 보면 사용자 CPU 사용률은 5% 정도입니다. 지난주 인프라팀이 백업 일정을 정리하면서 일부 서버의 백업 시간이 바뀌었다고 합니다. 같은 시간대 요청 수는 평소와 비슷하고, 다른 서버의 API는 멀쩡합니다. 느린 요청은 대부분 주문 데이터를 디스크에서 읽는 것들입니다.

단서
top · ps
top - 11:08:41 up 40 days, load average: 41.20, 38.77, 30.15
%Cpu(s):  5.1 us,  2.0 sy,  0.0 ni, 30.2 id, 62.3 wa,  0.0 hi,  0.4 si

$ ps -eo stat,comm | grep -c '^D'
37
iostat -x 1 · iotop
Device   r/s    w/s   r_await  w_await  %util
nvme1n1  1820   2110    212.4    268.9   99.8

$ sudo iotop -o -b -n 1 | head -3
  PID  IO>    COMMAND
 9912  95.1%  tar czf /backup/orders-data.tgz /data

과제 원인을 좁히고, 서비스를 되살리는 순서(검증 포함)와 재발 방지책을 적어 보세요.

먼저 볼 것
  • load average에 무엇이 들어가는지
  • CPU 부족과 I/O 대기 구분하기
점검 체크리스트
  1. top의 us·id·wa 비율
  2. D 상태(I/O 대기) 프로세스 수
  3. iostat -x 의 %util·await, iotop 으로 I/O를 쓰는 프로세스