리눅스 서버나 시스템에서 성능 문제를 겪을 때, 병목 현상이 어디에서 발생하는지 파악하는 것은 문제 해결의 첫걸음입니다. 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를 사용하는 프로세스를 실시간으로 모니터링할 수 있는 도구입니다. 이 명령어는 루트 권한으로 실행해야 합니다.
3.3 df 명령어 사용
df는 디스크의 전체 사용량과 여유 공간을 확인할 수 있는 명령어입니다.
- Used: 사용 중인 공간
- Avail: 사용 가능한 공간
- Use%: 사용 비율
디스크가 가득 찬 경우, 시스템 성능에 영향을 미칠 수 있습니다. 디스크의 공간을 확보하거나, 불필요한 파일을 삭제하는 방법으로 해결할 수 있습니다.
3.4 du 명령어 사용
du 명령어는 특정 디렉터리 내의 파일 및 디렉터리 크기를 확인할 수 있는 도구입니다.
4. 병목 구간 해결하기
병목 현상을 파악한 후, 이를 해결하기 위한 방법을 고민해야 합니다. 각 자원의 병목을 해결하는 방법은 다음과 같습니다.
- CPU 병목: 불필요한 프로세스를 종료하거나, 프로세스를 최적화하여 CPU 사용량을 줄입니다. 멀티스레드 처리나 프로세서 할당을 최적화할 수 있습니다.
- 메모리 병목: 불필요한 프로세스를 종료하거나, 시스템에 메모리를 추가하여 문제를 해결할 수 있습니다. 또한, 스왑을 최소화하도록 시스템 설정을 조정할 수 있습니다.
디스크 병목: 디스크 공간을 확보하거나, I/O 성능이 더 좋은 디스크로 업그레이드할 수 있습니다. 필요하지 않은 로그 파일을 삭제하거나, 디스크 조각 모음을 고려할 수도 있습니다.
'IT > Linux' 카테고리의 다른 글
NAVER Cloud의 Rocky Linux 8.6 지원 중단 소식과 대응 방법 (6) | 2024.11.04 |
---|---|
Linux 시스템 상태 파악하기 (2) | 2024.07.01 |
Rocky linux와 우분투 차이점 (0) | 2024.05.31 |
리눅스 서비스 등록 및 systemctl로 관리 (0) | 2024.02.18 |
chmod 파일 권한 변경 명령어 (0) | 2024.02.10 |