IT/Linux

리눅스에서 CPU, 메모리, HDD 병목 구간 파악하는 방법

나떼~ 2024. 11. 5. 23:03
728x90

리눅스 서버나 시스템에서 성능 문제를 겪을 때, 병목 현상이 어디에서 발생하는지 파악하는 것은 문제 해결의 첫걸음입니다. CPU, 메모리, 디스크(HDD/SSD) 각각의 자원은 시스템 성능에 중요한 영향을 미칩니다. 이 블로그에서는 리눅스에서 병목 구간을 확인하고 분석하는 방법에 대해 알아보겠습니다.

1. CPU 병목 구간 파악하기

CPU 병목은 시스템이 처리할 수 있는 작업량을 초과하는 경우 발생합니다. CPU가 과부하 상태일 때 시스템이 느려지며, 주로 top, htop, mpstat, vmstat 등의 도구를 사용하여 문제를 파악할 수 있습니다.

1.1 top 명령어 사용

top 명령어는 시스템의 현재 상태를 실시간으로 모니터링할 수 있는 도구입니다. top을 실행한 후, CPU 사용률을 확인합니다.

  • us (user): 사용자 공간에서 실행되는 프로세스의 CPU 사용량
  • sy (system): 커널 공간에서 실행되는 프로세스의 CPU 사용량
  • id (idle): CPU가 유휴 상태인 시간 비율
  • wa (waiting): I/O 대기 중인 CPU 시간 비율

CPU가 과부하 상태일 경우 us와 sy 값이 높고, id 값은 낮을 것입니다.

반응형

1.2 mpstat 명령어 사용

mpstat는 멀티코어 CPU 시스템에서 각 코어별 CPU 사용률을 모니터링할 수 있습니다.

  • -P ALL: 모든 프로세서(Core)에 대한 상태를 표시
  • 1: 1초 간격으로 결과 갱신

여기서 각 코어의 사용 상태를 확인하고, 특정 코어에서 과도한 사용률이 발생하는지 파악할 수 있습니다.

1.3 vmstat 명령어 사용

vmstat 명령어는 시스템의 메모리, 프로세스, I/O, CPU 등의 상태를 한눈에 볼 수 있게 해줍니다.

 
  • r: 실행 대기 중인 프로세스의 수
  • b: I/O 대기 중인 프로세스의 수
  • us, sy, id: CPU 사용 비율

CPU가 과도하게 사용되는 상황에서는 r 값이 높거나, us와 sy 값이 높은 경우가 많습니다.

2. 메모리 병목 구간 파악하기

메모리 부족은 시스템의 성능 저하를 일으킬 수 있습니다. 메모리가 부족하면 시스템은 스왑(Swap) 영역을 사용하게 되고, 이로 인해 성능이 급격히 떨어질 수 있습니다. free, vmstat, top 등으로 메모리 상태를 점검할 수 있습니다.

2.1 free 명령어 사용

free는 시스템의 메모리 상태를 확인할 수 있는 가장 간단한 명령어입니다.

  • total: 총 메모리 용량
  • used: 사용 중인 메모리 용량
  • free: 사용되지 않는 메모리 용량
  • buffers/cache: 캐시된 메모리 용량
  • available: 실제 사용 가능한 메모리 용량

메모리 부족이 발생한 경우 used가 total에 가까워지며, available 값이 크게 줄어들게 됩니다.

2.2 vmstat 명령어 사용

vmstat는 메모리 상태를 실시간으로 모니터링할 수 있습니다.

  • si: 스왑 인 (디스크에서 메모리로 데이터를 읽어오는 과정)
  • so: 스왑 아웃 (메모리에서 디스크로 데이터를 쓰는 과정)

스왑이 자주 발생하면 시스템에 메모리 병목이 있을 가능성이 큽니다.

2.3 top 명령어 사용

top 명령어에서도 메모리 사용량을 확인할 수 있습니다. CPU 사용량뿐만 아니라 메모리 사용량도 확인할 수 있어 병목을 파악하는 데 유용합니다.

  • Mem: 시스템의 메모리 사용 상태
  • Swap: 스왑 영역 사용 상태

메모리 병목이 발생하면, Swap의 사용량이 급격히 증가하거나, Mem의 free 값이 적어질 수 있습니다.

3. 디스크 병목 구간 파악하기

디스크 성능 저하는 I/O 작업이 많은 애플리케이션에서 자주 발생하는 문제입니다. 특히, 디스크 읽기/쓰기 속도가 느려지면 전체 시스템 성능에 큰 영향을 미칠 수 있습니다. iostat, iotop, df, du 등을 통해 디스크 상태를 확인할 수 있습니다.

3.1 iostat 명령어 사용

iostat는 시스템의 I/O 성능을 모니터링할 수 있는 유용한 도구입니다.

  • x: 확장된 출력
  • z: 0으로 나누기 오류 방지
  • 1: 1초 간격으로 갱신

주요 지표:

  • r/s: 초당 읽기 요청 수
  • w/s: 초당 쓰기 요청 수
  • await: I/O 대기 시간 (ms)
  • svctm: 서비스 시간 (ms)

디스크 병목이 발생하면 await 값이 매우 높고, r/s 또는 w/s가 과도하게 증가할 수 있습니다.

3.2 iotop 명령어 사용

iotop은 디스크 I/O를 사용하는 프로세스를 실시간으로 모니터링할 수 있는 도구입니다. 이 명령어는 루트 권한으로 실행해야 합니다.

디스크 사용량이 많은 프로세스를 확인하고, I/O 병목이 발생하는 프로세스를 추적할 수 있습니다.

3.3 df 명령어 사용

df는 디스크의 전체 사용량과 여유 공간을 확인할 수 있는 명령어입니다.

  • Used: 사용 중인 공간
  • Avail: 사용 가능한 공간
  • Use%: 사용 비율

디스크가 가득 찬 경우, 시스템 성능에 영향을 미칠 수 있습니다. 디스크의 공간을 확보하거나, 불필요한 파일을 삭제하는 방법으로 해결할 수 있습니다.

3.4 du 명령어 사용

du 명령어는 특정 디렉터리 내의 파일 및 디렉터리 크기를 확인할 수 있는 도구입니다.

디스크 공간을 차지하는 큰 파일이나 디렉터리를 찾아서 적절히 관리할 수 있습니다.

4. 병목 구간 해결하기

병목 현상을 파악한 후, 이를 해결하기 위한 방법을 고민해야 합니다. 각 자원의 병목을 해결하는 방법은 다음과 같습니다.

  • CPU 병목: 불필요한 프로세스를 종료하거나, 프로세스를 최적화하여 CPU 사용량을 줄입니다. 멀티스레드 처리나 프로세서 할당을 최적화할 수 있습니다.
  • 메모리 병목: 불필요한 프로세스를 종료하거나, 시스템에 메모리를 추가하여 문제를 해결할 수 있습니다. 또한, 스왑을 최소화하도록 시스템 설정을 조정할 수 있습니다.

디스크 병목: 디스크 공간을 확보하거나, I/O 성능이 더 좋은 디스크로 업그레이드할 수 있습니다. 필요하지 않은 로그 파일을 삭제하거나, 디스크 조각 모음을 고려할 수도 있습니다.

728x90
반응형