시스템 성능 모니터링

mhlee·2021년 2월 16일
0

시스템 성능 모니터링

0. 배경

물리 인프라에서는 서버 성능의 모니터링, 분석이 중요하다.
클라우드처럼 손쉽게 시스템을 확장(scale-out)할수 없기때문에, 항상 시스템의 상태를 모니터링하고 분석해야 적시에 확장(scale-out) 또는 증설(scale-up) 할 수 있다.

간단하게 시스템의 성능을 모니터링 할수 있는 커맨드를 정리해보자.

1. CPU 부하 vs CPU 이용율

우선 CPU 부하와 CPU 이용율을 정의해보자.

CPU 부하

최대 처리 용량 대비 CPU가 수행하는 작업량

CPU 이용율

최대 처리 용량 대비 CPU가 유휴 상태(idle)가 아닌 시간의 비율

CPU 이용율은 높으면서, CPU부하가 임계치(모니터링 경보수치)에 근접하는 상태를 유지한다면, 제일 효율적인 상태로 볼수 있다. (물론, 상태가 지속되면 반대로 시스템 확장/증설의 타이밍이기도 하다.)

2. 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

3. CPU 정보 확인하기

그럼 내 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

4. 시스템 상태 확인하기

top명령을 통해 전체적인 상황을 파악할 수 있다.

상단의 녹색 박스는 uptime에서 나오는 cpu 부하와 동일하다.

하단, 하늘색 박스는 다양한 정보가 출력된다.

  • us : 높은 우선순위(nice 되지 않은) 프로세스를 실행한 시간
  • sy : 커널 프로세스를 실행한 시간
  • ni : 낮은 우선순위(nice 된) 프로세스를 실행한 시간
  • id : 유휴(idle) 시간
  • wa : I/O 이벤트가 완료될 때까지 대기한 시간
  • hi : 하드웨어 인터럽트를 관리하는 데 걸린 시간
  • si : 소프트웨어 인터럽트를 관리하는 데 걸린 시간
  • st : 이 VM으로부터 하이퍼바이저(호스트)가 빼앗아간 시간

5. 메모리상태 확인하기

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

6. swap 메모리 확인하기

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

7. disk 사용량 확인

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

8. 참조

이 내용은 길벗출판사 "모던 리눅스 관리"의 내용을 정리한 글입니다.

profile
삽질하는 개발자

0개의 댓글