LabHub

리눅스 장애 대응 · 부하와 CPU · 실습

부하와 CPU 진단

LabHub 에서 이어서 보기

목표

부하 평균이 무엇을 세는지 직접 확인하고, CPU 사용률·PSI·스로틀링 카운터를 함께 읽어 "지표가 정상인데 느린" 상황을 설명할 수 있게 만듭니다.

왜 중요한가

리눅스의 부하 평균은 CPU 대기만 세지 않습니다. 디스크나 NFS 응답을 기다리는 D 상태 태스크도 함께 셉니다. 그래서 8코어 서버의 로드가 24 인데 CPU 유휴가 60% 인 상황이 정상 동작입니다. 그때 CPU 를 늘리는 것은 돈만 쓰는 일입니다. 반대로 컨테이너의 cgroup 스로틀링은 로드에도, steal 에도, 사용률에도 나타나지 않습니다 - 스로틀당한 태스크는 런큐에서 아예 빠지기 때문입니다. 그래서 cpu.stat 의 카운터를 따로 봐야 합니다. 이 실습에서 "없으면 없다고 적어라"까지 채점하는 이유는, 현장에서도 그 파일의 존재 여부 확인이 첫 동작이기 때문입니다.

단계

/root/load 디렉터리에서 작업합니다.

1. 이 환경의 CPU 개수를 /root/load/cpus.txt 에 숫자만 적으세요.
2. CPU 를 계속 쓰는 프로세스를 2개 이상 백그라운드로 띄우고 PID 를 /root/load/burner_pids.txt 에 한 줄에 하나씩 적으세요. 이후 단계 내내 살아 있어야 합니다.
3. 1~2분 기다린 뒤 /proc/loadavg1분 평균/root/load/load1.txt 에 적으세요. 0.7 이상이어야 합니다.
4. 그 프로세스들의 현재 상태 글자 한 개를 /root/load/state.txt 에 적으세요.
5. 첫 번째 프로세스의 누적 CPU 시간(초)/root/load/cpu_sec.txt 에 정수로 적으세요. 5초 이상이어야 합니다.
6. /proc/pressure/cpusome 줄에서 avg10 값을 /root/load/psi.txt 에 적으세요. 파일이 없으면 unavailable 이라고 적으세요.
7. cgroup 의 cpu.stat 에서 nr_throttled 값을 /root/load/throttle.txtnr_throttled=<값> 형식으로 적으세요. 읽을 수 없으면 unavailable 이라고 적으세요.
8. /root/load/loadcheck.sh <임계비율> 을 만드세요. 1분 부하 평균 / CPU 개수 가 임계비율을 넘으면 high load=<값> cpus=<개수> 를 출력하고 종료 코드 1, 넘지 않으면 ok 와 종료 코드 0. 인자가 없으면 0이 아닌 코드입니다.

참고

단계 8개

  1. CPU 개수 확인
  2. CPU 태우는 프로세스 띄우기
  3. 부하 평균 오르는 것 확인
  4. 프로세스 상태 글자 읽기
  5. 누적 CPU 시간 재기
  6. PSI 압박 지표 읽기
  7. cgroup 스로틀링 카운터
  8. 부하 판정 스크립트