본문 바로가기

리눅스

리눅스 Load Average

728x90

리눅스 Load Average

Load Averages

이 파일의 처음 세 가지 필드(값)는 로드 평균 수치로 1분, 5분, 15분 동안 평균화된 실행 대기열(state R) 또는 디스크 I/O 대기 중(state D)인 작업의 수를 나타냅니다.

 

Load Average 값은 CPU 작업 큐에 대기 중인 프로세스의 수를 기준으로 계산됩니다. 프로세스가 실행을 기다리는 작업이 많을수록 Load Average 값은 증가합니다. 일반적으로, Load Average 값이 높을수록 시스템의 작업 부하가 더 높다는 것을 의미합니다.

 

Load Average 값의 해석은 다음과 같습니다.

 

  • 값이 0에 가까울 때: 시스템이 대부분의 시간 동안 놀고 있다(유휴 상태)는 의미입니다.
  • 값이 1에 가까울 때: 시스템이 작업 부하에 조금 더 가까워지고 있습니다. CPU 작업 큐에 약간의 대기 작업이 있을 수 있습니다.
  • 값이 1보다 크고 5 미만일 때: 시스템이 중간 정도의 작업 부하를 겪고 있습니다. 일반적으로 처리할 수 있는 범위 내에 있습니다.
  • 값이 5 이상일 때: 시스템이 상당한 작업 부하를 겪고 있습니다. CPU 작업 큐에 많은 대기 작업이 있을 수 있으며, 응답 속도가 느려질 수 있습니다.
  • CPU 개수보다 load average가 높으면 성능 문제가 있을 수 있습니다.

Load Average는 시스템 모니터링 및 성능 분석에 유용한 지표입니다. 이 값을 확인하여 시스템 작업 부하를 파악하고 필요한 대응 조치를 취할 수 있습니다.

Load Average를 확인하는 방법

  • uptime 명령어
$ uptime
 20:12:49 up 27 min,  1 user,  load average: 0.00, 0.01, 0.04
  • top 명령어
$ top -b -n 1 | head -n 10
top - 20:12:52 up 27 min,  1 user,  load average: 0.00, 0.01, 0.04
Tasks: 117 total,   1 running, 116 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3880588 total,   533568 free,  3223388 used,   123632 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used.   474088 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0  125504   3928   2572 S   0.0  0.1   0:00.62 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
  • w 명령어
$ w
 20:29:26 up 44 min,  1 user,  load average: 0.00, 0.01, 0.04
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.0.2      20:18    6.00s  0.06s  0.00s w
  • /proc/loadavg 파일 읽기
$ cat /proc/loadavg 
0.00 0.01 0.04 1/131 1646
728x90

 

ps 명령어와 다른 몇 가지 명령어를 함께 사용하여 R(실행중인) 상태D(대기중인) 상태의 프로세스 수를 계산하는 방법

  • ps man 페이지
    • R running or runnable (on run queue) : 실행 중(CPU 자원을 소모)
    • D uninterruptible sleep (usually IO) : 입출력을 기다리는 상태(디스크 또는 네트워크 등 I/O 작업 처리를 대기)
ps -eL h o state,ucmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
$ ps -eL h o state,ucmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr 
      1 R ps
  • ps -eL h o state,ucmd: ps 명령어를 사용하여 모든 프로세스의 상태(state)와 명령어(ucmd)를 출력합니다. -e는 모든 프로세스를 선택하고, -L은 스레드를 포함합니다. h는 헤더를 숨기고, o state,ucmd는 상태와 명령어 열만 출력합니다.
  • awk '{if($1=="R"||$1=="D"){print $0}}': awk를 사용하여 R 상태나 D 상태인 프로세스만 출력합니다. $1은 첫 번째 열인 상태를 나타냅니다.
  • sort: 프로세스를 상태별로 정렬합니다.
  • uniq -c: 연속적으로 중복된 행을 제거하고, 각 상태별로 중복된 행의 개수를 출력합니다.
  • sort -k 1nr: 상태별 중복된 행의 개수를 내림차순으로 정렬합니다.

위의 명령어를 실행하면 R 상태와 D 상태의 프로세스 수가 표시됩니다. 첫 번째 열은 각 상태에 해당하는 프로세스 수이고, 두 번째 열은 해당 프로세스의 상태와 명령어입니다.

 

1. R(실행중인) 상태의 프로세스 수 계산

ps -eo state | grep "^R" | wc -l

2. D(대기중인) 상태의 프로세스 수 계산

ps -eo state | grep "^D" | wc -l

load average 분석

vmstat에 날짜와 시간 출력

vmstat -n 5 | awk '{now=strftime("%F %T"); print now, " ", $0}'

  • vmstat man 페이지
    • r: 실행 가능한 프로세스 수(실행 중이거나 실행 시간을 기다리는 중)입니다. CPU 병목현상
    • b: I/O가 완료되기를 기다리며 차단된 프로세스 수입니다. DISK 병목현상

**** CPU 로드는 사용 가능한 코어 수를 초과하지 않아야 합니다.

 

참고URL

- 리눅스 명령어를 이용한 시스템 모니터링하기 : https://www.whatap.io/ko/blog/10

 

728x90