리눅스에서 CPU 사용량이 높을 때 이를 확인하고 분석할 수 있는 명령어는 다양합니다. 가장 대표적인 명령어는 top, htop, ps, **vmstat**입니다. 이 명령어들의 사용법과 예시를 자세히 설명해 드릴게요.


1. top

top 명령어는 실시간으로 시스템의 상태를 보여주는 강력한 도구입니다. CPU, 메모리, 실행 중인 프로세스 목록을 주기적으로 업데이트하며 보여줍니다.

  • 사용법:
  • Bash
     
    top
    
  • 주요 정보:
    • CPU 상태: top 출력의 상단에서 us (사용자), sy (시스템), id (유휴) 등으로 CPU 사용률을 확인할 수 있습니다. us와 sy 값이 높으면 CPU 부하가 높다는 의미입니다.
    • 프로세스 목록: 하단에는 CPU 사용량이 높은 순서대로 프로세스 목록이 정렬되어 표시됩니다. PID (프로세스 ID), USER (사용자), %CPU (CPU 사용률), %MEM (메모리 사용률) 등을 확인할 수 있습니다.
  • 활용 팁:
    • P를 누르면 CPU 사용률 기준으로 정렬됩니다.
    • 1을 누르면 각 코어별 CPU 사용률을 확인할 수 있습니다.
    • q를 누르면 top을 종료합니다.

2. htop

htop은 top의 개선된 버전으로, 더 직관적인 사용자 인터페이스를 제공합니다. 색상으로 구분된 막대 그래프와 마우스 클릭을 지원하여 사용이 편리합니다. htop은 기본 설치되어 있지 않을 수 있으므로, sudo apt install htop (데비안/우분투) 또는 sudo yum install htop (센토스/레드햇) 등으로 설치해야 합니다.

  • 사용법:
  • Bash
     
    htop
    
  • 주요 정보:
    • top과 동일하게 CPU, 메모리 사용률을 보여주지만, 각 코어의 사용률을 시각적인 막대 그래프로 한눈에 볼 수 있습니다.
    • 프로세스 목록을 쉽게 정렬하거나 필터링할 수 있습니다.
  • 활용 팁:
    • F6을 눌러 정렬 기준을 변경할 수 있습니다.
    • F9를 눌러 선택된 프로세스를 강제 종료(kill)할 수 있습니다.

3. ps (process status)

ps 명령어는 현재 실행 중인 프로세스의 스냅샷을 보여줍니다. 실시간으로 업데이트되지 않고, 명령어를 실행한 시점의 정보를 보여줍니다.

  • 사용법:
  • Bash
     
    ps -aux
    
  • 주요 정보:
    • ps -aux는 현재 시스템의 모든 프로세스(a), 다른 사용자의 프로세스(x), 그리고 상세 정보(u)를 보여줍니다.
    • %CPU 열을 확인하여 특정 프로세스의 CPU 사용률을 파악할 수 있습니다.
  • 활용 팁:
    • ps -aux와 grep을 조합하여 특정 프로세스의 CPU 사용률을 필터링할 수 있습니다.
    Bash
     
    ps -aux | grep "프로세스명"
    

4. vmstat (virtual memory statistics)

vmstat은 시스템의 가상 메모리, 프로세스, CPU 활동, 디스크 I/O 등을 종합적으로 보여줍니다.

  • 사용법:
  • Bash
     
    vmstat [갱신 주기(초)] [반복 횟수]
    
  • 주요 정보:
    • procs (프로세스): r (실행 대기 중인 프로세스 수), b (인터럽트 불가 슬립 상태의 프로세스 수). r 값이 높으면 CPU에 부하가 걸려 작업 처리가 지연되고 있다는 의미입니다.
    • cpu (CPU): us (사용자), sy (시스템), id (유휴). top과 동일한 의미입니다.
  • 예시:위 명령어는 3초 간격으로 5번 시스템 정보를 출력합니다. CPU 부하가 높을 때 r과 us/sy 값을 함께 확인하여 원인을 분석할 수 있습니다.
  • Bash
     
    vmstat 3 5
    

 


 

서버 내 CPU 사용량을 확인하고 부하 원인을 파악하는 가장 효율적인 방법은 top과 vmstat을 함께 활용하는 것입니다. 두 도구의 특징을 이해하고 상호 보완적으로 사용하면 문제를 신속하게 진단할 수 있습니다.

top을 활용한 실시간 부하 확인

top은 현재 시스템 상태를 실시간으로 보여주는 데 유용합니다. CPU 사용량이 높을 때 top을 실행하면, 어떤 프로세스가 CPU를 많이 사용하는지 즉시 확인할 수 있습니다.

  1. top 실행: 터미널에 top을 입력합니다.
  2. Bash
     
    $ top
    
  3. 전체 CPU 사용량 확인: 출력 화면 상단의 Cpu(s) 라인을 확인합니다.
    • us (user): 사용자 프로세스가 사용하는 CPU 비율입니다. 이 값이 높으면 사용자 애플리케이션(웹 서버, DB 등)에 부하가 걸린 것입니다.
    • sy (system): 커널(OS)이 사용하는 CPU 비율입니다. 이 값이 높으면 시스템 호출, 디스크 I/O 등 커널 작업에 부하가 걸린 것입니다.
    • id (idle): CPU가 유휴 상태인 비율입니다. 이 값이 낮을수록 CPU 사용량이 높습니다.
    • 💡 실제 서버에서는 us와 sy의 합이 80% 이상이면서 id가 20% 미만이면 CPU 부하가 높다고 판단할 수 있습니다.
  4. %Cpu(s): 25.1 us,  3.2 sy,  0.0 ni, 71.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    
  5. 프로세스별 부하 확인: 화면 하단의 프로세스 목록을 확인합니다.
    • P 키를 눌러 CPU 사용률(%CPU)이 높은 순서로 정렬합니다.
    • %CPU 열의 값을 보고 어떤 프로세스가 CPU를 독점하고 있는지 파악할 수 있습니다. 예를 들어, php, java, python, httpd 등의 프로세스가 높은 CPU를 사용하고 있다면 해당 애플리케이션에 문제가 있는 것입니다.
    • PID를 확인하여 문제가 되는 프로세스를 특정하고, 필요에 따라 kill 명령어로 종료할 수 있습니다.

vmstat을 활용한 CPU 부하 원인 분석

vmstat은 CPU, 메모리, I/O 등 시스템 자원 통계를 주기적으로 보여줍니다. top이 '어떤 프로세스'가 문제인지 보여준다면, vmstat은 '왜' CPU 부하가 발생하는지 그 원인을 좁히는 데 유용합니다.

  1. vmstat 실행: 2초 간격으로 10회 출력하도록 실행해봅니다.
  2. Bash
     
    $ vmstat 2 10
    
  3. CPU 부하 원인 분석: 출력 결과에서 procs와 cpu 섹션을 중점적으로 확인합니다.
    • procs (프로세스):
      • r: 실행 대기 중인 프로세스 수입니다. 이 값이 CPU 코어 수를 초과하면 CPU 자원이 부족하여 프로세스들이 대기하고 있다는 의미입니다. 이 값이 높을 때 CPU 사용률(us, sy)도 높으면 CPU 연산 집중형 작업이 많다는 뜻입니다.
      • b: 블록된(blocked) 프로세스 수입니다. 디스크 I/O, 네트워크 I/O 등의 작업을 기다리고 있는 프로세스입니다. 이 값이 높을 때 CPU 사용률이 낮고 wa 값이 높다면 I/O 병목 현상이 부하의 원인일 가능성이 큽니다.
    • cpu (CPU):
      • us (user): top과 동일합니다.
      • sy (system): top과 동일합니다.
      • wa (iowait): 디스크 I/O를 기다리는 데 소모된 CPU 시간입니다. 이 값이 높으면 디스크에서 데이터를 읽거나 쓰는 작업이 많아 CPU가 대기하고 있다는 의미입니다.
  4. procs -----------memory---------- ---swap-- -----io---- -system-- --------cpu--------
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
     1  0      0 2345678  1234  56789    0    0     1    25   20   30   5   2  93   0   0
     5  0      0 2345678  1234  56789    0    0     1   150   35   50  60  10  25   5   0
    

요약: CPU 부하 분석 시나리오

상황 (top에서) vmstat에서 보이는 지표 예상 원인
us가 높고, 특정 프로세스가 높은 CPU 사용률을 보임 r 값이 높고, wa가 낮음 CPU 연산 집중형 애플리케이션 문제 (ex: 무한 루프, 비효율적인 코드)
us는 낮고, sy가 높음 r이 높고, bi, bo 등의 값이 높음 시스템 호출 과부하 (ex: 잦은 네트워크 패킷 처리, 디스크 I/O)
us, sy가 낮지만, id도 낮음 wa 값이 높음 디스크 I/O 병목 (ex: 데이터베이스 쿼리, 대용량 파일 복사)

 

서버의 CPU가 100%에 근접한 상황을 top과 vmstat으로 조회했을 때의 예시 상태값은 다음과 같습니다. 이 값들을 통해 어떤 프로세스가 부하를 일으키고 있는지, 그리고 그 원인이 무엇인지 파악할 수 있습니다.

1. top 명령어 출력 예시

top은 CPU를 점유하고 있는 프로세스를 실시간으로 보여줍니다. 아래 예시에서 CPU 사용량은 us와 sy의 합으로 90%가 넘으며, 특정 프로세스가 높은 부하를 일으키고 있음을 알 수 있습니다.

Bash
 
top - 12:34:56 up 12 days,  3:21,  1 user,  load average: 3.50, 3.20, 3.15
Tasks: 250 total,   2 running, 248 sleeping,   0 stopped,   0 zombie
%Cpu(s): 85.2 us,  5.8 sy,  0.0 ni,  8.0 id,  0.0 wa,  0.0 hi,  1.0 si,  0.0 st
KiB Mem : 16456780 total,  1521234 free, 12345678 used,  2567890 buff/cache
KiB Swap:  8192000 total,  8192000 free,        0 used,  3456789 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
12345 user_a    20   0 1234567  87654  34567 R  95.0  5.3  15:45.20 webserver
 6789 user_b    20   0  543210  23456  12345 S   2.1  1.2   0:12.34 mysql
 ...

분석:

  • %Cpu(s) 라인:
    • 85.2 us: 사용자 프로세스가 CPU의 **85.2%**를 사용하고 있습니다. 이는 특정 애플리케이션에 의해 부하가 발생했음을 의미합니다.
    • 5.8 sy: 시스템(커널) 프로세스가 **5.8%**를 사용하고 있습니다.
    • 8.0 id: CPU가 유휴 상태인 비율이 **8.0%**에 불과합니다. CPU가 거의 꽉 차 있음을 보여줍니다.
  • 프로세스 목록:
    • **PID 12345**를 가진 webserver 프로세스가 **CPU의 95.0%**를 점유하고 있습니다. 이 프로세스가 현재 CPU 부하의 주원인입니다.

2. vmstat 명령어 출력 예시

vmstat은 CPU 상태를 종합적으로 보여주며, 특히 r과 wa 값을 통해 부하의 성격을 파악하는 데 유용합니다.

Bash
 
vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- --------cpu--------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs  us  sy  id  wa  st
 5  0      0 2345678  1234  56789    0    0     1    25   20   30  85  10   5   0   0
 6  0      0 2345678  1234  56789    0    0     2   120   25   40  87   8   5   0   0
 7  0      0 2345678  1234  56789    0    0     1   110   30   45  86   9   5   0   0

분석:

  • procs (r):
    • r 열의 값이 5, 6, 7로 높습니다. 이는 5개 이상의 프로세스가 CPU를 사용하기 위해 대기열에 쌓여있다는 것을 의미합니다.
  • cpu:
    • us 값은 85% 이상으로 매우 높습니다. 이는 top과 마찬가지로 사용자 프로세스에 부하가 있음을 나타냅니다.
    • wa (I/O Wait) 값은 0에 가깝습니다. 이는 CPU가 디스크 I/O를 기다리느라 낭비되는 시간이 거의 없다는 것을 의미합니다.

결론

위 두 예시를 종합해 볼 때, CPU 부하의 원인은 I/O 병목 현상이 아닌, webserver와 같이 CPU를 집중적으로 사용하는 애플리케이션의 연산 때문일 가능성이 매우 높습니다. top을 통해 해당 프로세스를 정확히 식별하고, vmstat을 통해 I/O 문제가 아님을 확인할 수 있습니다.

'기타' 카테고리의 다른 글

13. 커널  (0) 2025.08.28
12. Memory  (2) 2025.08.28
10. Crontab  (0) 2025.08.28
08. 로그  (1) 2025.08.28
06. FG BG nohup &  (0) 2025.08.28

+ Recent posts