물리 인프라에서는 서버 성능의 모니터링, 분석이 중요하다.
클라우드처럼 손쉽게 시스템을 확장(scale-out)할수 없기때문에, 항상 시스템의 상태를 모니터링하고 분석해야 적시에 확장(scale-out) 또는 증설(scale-up) 할 수 있다.
간단하게 시스템의 성능을 모니터링 할수 있는 커맨드를 정리해보자.
우선 CPU 부하와 CPU 이용율을 정의해보자.
최대 처리 용량 대비 CPU가 수행하는 작업량
최대 처리 용량 대비 CPU가 유휴 상태(idle)가 아닌 시간의 비율
CPU 이용율은 높으면서, CPU부하가 임계치(모니터링 경보수치)에 근접하는 상태를 유지한다면, 제일 효율적인 상태로 볼수 있다. (물론, 상태가 지속되면 반대로 시스템 확장/증설의 타이밍이기도 하다.)
uptime 명령을 실행하면, 1분/5분/15분의 평균부하율을 출력한다.
아래의 경우, 0.51, 0.32, 0.39이다.
최대치는 코어 갯수이다. 즉, 4 core인경우, 최대치는 4가 된다.
mhlee@pop-os:~$ uptime
14:09:36 up 5:06, 1 user, load average: 0.51, 0.32, 0.39
그럼 내 CPU의 core는 모두 몇개 인가?
알면 좋지만, 모르면 아래 명령을 통해 확인 가능하다.
아래의 경우는 16 core cpu이다.
실제 사용중인 cpu는 AMD 4750G 이다.
스펙으로는 8 core 16 thread로 표기되는데, OS에서 core의 기준은 thread로 표시되는것 같다. (확인필요)
mhlee@pop-os:~$ cat /proc/cpuinfo | grep processor
processor : 0
processor : 1
processor : 2
processor : 3
processor : 4
processor : 5
processor : 6
processor : 7
processor : 8
processor : 9
processor : 10
processor : 11
processor : 12
processor : 13
processor : 14
processor : 15
top명령을 통해 전체적인 상황을 파악할 수 있다.
상단의 녹색 박스는 uptime에서 나오는 cpu 부하와 동일하다.
하단, 하늘색 박스는 다양한 정보가 출력된다.
free 명령을 통해 메모리 상태를 확인할 수 있다.
가장 중요한 항목은 available이다.
available과 free의 차이는, free는 현재 미사용인 메모리 크기를 나타내고, available은 캐쉬등으로 사용되고 있으나, 필요시 바로 회수될 수 있는 메모리까지 포함한 사이즈이다.
mhlee@pop-os:~$ free -h
total used free shared buff/cache available
Mem: 15Gi 6.9Gi 2.7Gi 900Mi 5.5Gi 7.0Gi
스왑: 4.0Gi 0B 4.0Gi
vmstat 명령을 통해 swap 메모리 확인이 가능하다.
vmstat <인터벌> <횟수> 형태로 사용가능하다.
자세히 봐야할 항목은 si, so항목이다.
이 항목에 값이 출력된다면 swap 메모리로 데이터가 입력/출력이 계속된다는 이야기이다.
swap 메모리가 지속적으로 사용된다는것은 물리 메모리가 부족한 현상이고, 메모리 추가를 고려해야 한다.
mhlee@pop-os:~$ vmstat 30 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 2763732 218116 5557576 0 0 6 21 55 76 2 1 98 0 0
2 0 0 2784392 218236 5558824 0 0 0 144 6843 12174 4 1 95 0 0
2 0 0 2779996 218540 5564544 0 0 0 157 6999 12438 4 1 95 0 0
3 0 0 2784164 218716 5568064 0 0 0 208 7595 13880 4 2 94 0 0
df -h를 사용하여 disk 사용량을 확인할 수 있다.
mhlee@pop-os:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.5G 0 7.5G 0% /dev
tmpfs 1.6G 2.1M 1.6G 1% /run
/dev/nvme0n1p3 461G 69G 369G 16% /
tmpfs 7.6G 877M 6.7G 12% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.6G 0 7.6G 0% /sys/fs/cgroup
/dev/nvme0n1p1 498M 291M 207M 59% /boot/efi
/dev/nvme0n1p2 4.0G 2.2G 1.9G 53% /recovery
tmpfs 1.6G 16K 1.6G 1% /run/user/110
tmpfs 1.6G 112K 1.6G 1% /run/user/1000
파일정보를 관리하는 inode도 확인해 봐야 한다.
df -i를 통해 inode 사용량을 확인할 수 있다.
mhlee@pop-os:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 1960230 559 1959671 1% /dev
tmpfs 1980363 1078 1979285 1% /run
/dev/nvme0n1p3 30703616 642926 30060690 3% /
tmpfs 1980363 481 1979882 1% /dev/shm
tmpfs 1980363 3 1980360 1% /run/lock
tmpfs 1980363 18 1980345 1% /sys/fs/cgroup
/dev/nvme0n1p1 0 0 0 - /boot/efi
/dev/nvme0n1p2 0 0 0 - /recovery
tmpfs 1980363 43 1980320 1% /run/user/110
tmpfs 1980363 128 1980235 1% /run/user/1000
만약 사용율이 상당하다면 파일의 갯수가 많은 디렉토리를 탐색하며 파일을 삭제해야 한다.
이때 아래와 같은 명령이 도움이 된다.
아래의 예에서 Android 폴더에 가장 많은 파일이 존재한다는 을 확인할수 있다.
mhlee@pop-os:~$ find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
...
...
6128 .config
6774 .m2
9759 .vscode
11038 flutter
14779 .gradle
27985 .pyenv
38405 .cache
52524 .local
113690 Android
이 내용은 길벗출판사 "모던 리눅스 관리"의 내용을 정리한 글입니다.