uptime, top으로 CPU 부하 확인하기

이 글은 리눅스 상에서 CPU 자원의 현재 상황을 모니터링하는 방법을 소개한다.

“데브옵스: 개발자, QA, 관리자가 함께 보는 리눅스 서버 트러블슈팅 기법”을 참고했다.

코드가 예전보다 훨씬 느리게 실행돼 응답이 느려졌다면 무엇부터 확인해야 할까?

시스템의 특정 자원을 모두 소비했기 때문에 시스템이 느려질 수도 있다.

여기서 말하는 자원의 종류로는

  • CPU
  • Main Memory
  • Disk I/O
  • Network I/O

이 있고, 이 글은 CPU 부하에 한정해 소개한다.


uptime

load average 다음의 세 실수값이 중요하다.

1
2
$ uptime
05:23:41 up 5 days, 1:41, 0 users, load average: 0.00, 0.00, 0.00

System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

[man uptime]

load average는 실행 중 혹은 인터럽트 불가능한 상태의 프로세스의 평균 개수이다.

  • 실행 중인 프로세스: CPU를 사용 중이거나 CPU 사용을 기다리는 중인 프로세스
  • 인터럽트 불가능한 프로세스: I/O 접근을 대기하는 프로세스

예를 들어 average가 1.00이면 항상 1개의 프로세스가 실행 된다는 것으로 1개의 코어의 로드가 100%라는 의미이다.

[superuser]

멀티코어 CPU에서는 코어 별로 독립적인(병렬적인, parallel) 프로세스(스레드) 실행이 가능하기 때문에 프로세스 개수가 n이면 n이 전체 코어의 로드가 100%임을 나타내는 것이다.

Hyperthreading이 적용되어 CPU에서 2배의 스레드 실행이 가능한 경우 2n이 100%의 로드를 나타낼 것이다.

다시 돌아와서, uptime이 표시하는 세 개의 숫자는 각각 최근 1분, 5분, 15분의 프로세스 평균 개수를 의미한다.

최근 1분의 부하는 현재 시스템에 가해지는 부하를 나타내는 것이다.

아래의 예시를 살펴보자.

1
2
$ uptime
05:23:41 up 25 days, 1:41, 2 users, load average: 17.29, 1.12, 0.10

최근 15분간의 로드가 거의 없던 것에 비해 현재 1분의 로드가 꽤 큰 것을 확인할 수 있다.

  • 따라서 부하는 최근에 시작됐음을 확인할 수 있다.

top

top은 기본값으로 CPU 사용률로 프로세스 정보를 나열하는 유틸이지만, 상단에 표시된 %Cpu(s)행은 CPU 정보를 표시한다.

Name Full Name Description
us User CPU time 사용자 프로세스가 소비한 CPU 사용량 비율 (nice가 적용되지 않은)
sy System CPU time 커널과 커널 프로세스의 CPU 사용량 비율
ni nice CPU time nice가 적용된 프로세스의 CPU 사용량 비율
id CPU idle time CPU가 사용되지 않는 유휴 비율
wa I/O wait CPU가 I/O를 대기하면서 소비한 시간의 비율
hi hardware interrupts 하드웨어 인터럽트를 제공하는데 CPU가 소비한 시간의 비율
si software interrupts 소프트웨어 인터럽트를 제공하는데 CPU가 소비한 시간의 비율
st steal time (비교적 세부 사항이라 생략)

위 표에서 가장 중요한 값은 wa라고 한다. 이 값이 낮으면 I/O가 문제가 아니라고 한다.

I/O 대기(wa)와 유휴 시간(id)이 모두 낮으면 사용자 CPU 사용률(us)을 확인하고 어떤 프로세스가 높은 CPU 사용량을 보이는지 확인해야 한다.

I/O 대기는 낮은데 유휴 시간은 높다면 병목은 CPU가 아니다. (당연하다. 유휴시간이 있다는 것 자체가..)

uptime, top으로 CPU 부하 확인하기

https://jsqna.com/linux-uptime-top/

Author

Seongbin Kim

Posted on

21-08-29

Updated on

21-08-28

Licensed under

댓글