해당 포스팅은 인프런 "리눅스 성능 분석 시작하기" 를 수강하고 정리한 글입니다 :)
- 리눅스 기반 os 에서 돌아가는 서버 시스템의 성능 측정 및 장애 대응에 대한 학습 내용 정리 글 입니다.
💡 리눅스 성능 분석의 기본 명령어
명령어 | 역할 |
uptime | 시스템 가동 시간, Load Average 확인 |
dmesg | 커널 메세지 확인 (OOME 발생 여부, SYN Flooding 여부) |
free | 메모리 사용 현황 확인 |
df | 디스크 여유 공간 및 inode 공간 확인 |
top | 프로세스들의 상태, CPU 사용률, 메모리 사용률 확인 |
netstat | 네트워크 연결 정보 확인 |
tcpdump | 네트워크 트러블 슈팅 분석을 위한 패킷 수집 명령어 |
📌 top 명령어
- 커널 혹은 쉘스크립트 환경에서 간단하게 CPU 및 메모리 사용량을 확인해 볼수 있는 명령어 → 'top'
//계속 실행하며 확인
$ top
//hot key 사용 (순서대로 입력)
$ top → 1 → d → 1
전체 CPU 정보
- 5:16 : 5시간 16분 전에 서버가 구동
- load average
- 현재 시스템이 얼마나 일을 하는지를 나타냅니다.
- 3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수를 표현합니다.
- CPU 코어수 보다 적어야 합니다.
- Tasks : 프로세스 개수
- us : USER 를 의미하며, 프로세스의 일반적인 CPU 사용량
- wa :watiting 을 의미하며, I/O 작업을 대기할 때의 CPU 사용량
- KiB Mem, Swap : 각 메모리의 사용량
프로세스 CPU 할당 정보
- PR : 실행 우선순위
- VIRT, RES, SHR : 메모리 사용량
- VIRT
- 프로세스가 사용하고 있는 virtual memory의 전체 용량
- 프로세스에 할당된 가상 메모리 전체 (SWAP + RES)
- RES
- 현재 프로세스가 사용하고 있는 물리 메모리의 양
- 실제로 메모리에 올려서 사용하고 있는 물리 메모리 size
- SHR
- 다른 프로세스와 공유하고 있는 shared memory의 양
- 예시로 라이브러리를 들 수 있음. 대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기에 이런 라이브러리를 공유 메모리에 올려서 사용
- VIRT
- S : 프로세스 상태(작업중, I/O 대기, 유휴 상태 등)
- D : uninterruptible sleep (I/O) - [I/O 대기 상태 == 'vmstat의 b 상태']
- R : running (CPU)
- S : sleeping - 작업 x
- Z : zombie - 부모 프로세스를 잃어버린 상태, cpu나 메모리를 사용하지는 않음
- 시스템 리소스를 사용하지는 않습니다.
- 하지만 전체 생성가능한 프로세스 수의 총량을 잡아먹기 때문에 PID 고갈을 일으킬 수 있습니다.
- 'sudo sysctl -a | grep -i pid_max' 로 동시에 존재가능한 프로세스 총량을 알 수 있습니다.
- I : IDLE - 프로그램을 수행하지 않는 상태(프로세스가 아님)
- T : 작업 제어 신호(Job Control Signal)에 의해 중지됨
- t : Trace 중 디버거에 의해 중지됨
→ D, R 상태인 프로세스만 load average에 포함됩니다.
→ 좀비 프로세스 특징
- 시스템 리소스를 사용하지는 않습니다.
- 하지만 전체 생성가능한 프로세스 수의 총량을 잡아먹기 때문에 PID 고갈을 일으킬 수 있습니다.
- 'sudo sysctl -a | grep -i pid_max' 로 동시에 존재가능한 프로세스 총량을 알 수 있습니다.
✔️ top
- 시스템의 상태를 전반적으로 가장 빠르게 파악 가능한 상태를 보여주는 리눅스 명령어 (CPU, Memory, Process)
- 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여줍니다.
- top 실행 후 명령어
- shift + p : CPU 사용률 내림차순
- shit + m : 메모리 사용률 내림차순
- shift + t : 프로세스가 돌아가고 있는 시간 순
- k : kill. k 입력 후 PID 번호 작성. signal은 9
- f : sort field 선택 화면 -> q 누르면 RES순으로 정렬
- a : 메모리 사용량에 따라 정렬
- b : Batch 모드로 작동
- 1 : CPU Core별로 사용량 보여줌
- 메모리 용량 단위 변경
- E를 누르면 상단에 표기되는 데이터 단위가 변경됩니다.
- e를 누르면 하단에 표기되는 데이터 단위가 변경됩니다.
- ps와 top의 차이점
- ps는 ps한 시점에 proc에서 검색한 cpu 사용량
- top은 proc에서 일정 주기로 합산해 cpu 사용율 출력
✔️ hot key 사용법
top 명령어에서는 hot key를 이용해 더 원할하게 원하는 정보를 볼 수 있습니다.
1) 키패드 1
- 키패드 숫자 1을 누르면 Cpu(s) 가 각각의 CPU로 변경됩니다.
- Cpu(s) 는 모든 cpu 사용량의 평균치를 보여주기 때문에, 혹여 cpu 불균형이 일어났을 때 확인할 수가 없으므로, hot key (1) 을 사용하여 개별적인 사용랼을 확인하는게 좋습니다.
↓
2) 영문자 d
- 영문자 d를 누르면 기본 3초인 인터벌을 변경할 수 있습니다.
- 해당 핫키를 입력하면 아래 화면 처럼 "change delay from 3.o to " 뒤에 원하는 초를 입력하면 인터벌이 변경됩니다.
참고
'운영체제 > Linux' 카테고리의 다른 글
[Linux] tcpdump - 네트워크 트러블 슈팅 도구 (리눅스 패킷 수집 및 분석하기) (0) | 2023.09.02 |
---|---|
[Linux] netstat - 리눅스 네트워크 연결 정보 (0) | 2023.09.01 |
[Linux] df - 디스크 사용량 모니터링 하기 (0) | 2023.08.28 |
[Linux] free - 메모리 사용량 확인하기 (0) | 2023.08.24 |
[Linux] dmesg - 리눅스 커널 로그 메세지 확인하기 (OOME, SYN Flooding) (0) | 2023.08.23 |