개별 프로세스 또는 전체 시스템이 CPU와 메모리를 얼마나 사용하는지 분석하는 방법을 알아봅니다.
시스템 관리자는 흔히 높은 CPU, 메모리, 네트워크 사용률로 인해 애플리케이션 속도가 느려지거나 응답하지 않는 문제를 해결해야 합니다. 서버가 단일 프로세스만 실행하는 경우에는 해당 프로세스가 모든 자원을 소모하는지 여부를 쉽게 알 수 있습니다. 하지만 여러 서비스가 동시에 돌아가고 있고, 어떤 서비스가 자원을 과도하게 사용하는지 찾아야 하는 공유 서버 환경에서는 상황이 복잡해집니다.
이러한 문제를 실시간으로 해결할 수 있는 다양한 모니터링 도구가 존재합니다. 하지만 이러한 솔루션이 없거나 명령줄 기반의 해결책을 찾고 있다면, 아래에서 무료로 사용할 수 있는 유용한 도구들을 소개합니다.
top 명령어
프로세스 개요를 파악하기 위해 먼저 ‘top’ 또는 ‘htop’ 명령의 결과를 살펴보는 것으로 시작할 수 있습니다.
아래 예시에서 볼 수 있듯이, 각 프로세스가 시스템 자원을 얼마나 활용하고 있는지에 대한 전반적인 정보를 제공합니다. 예를 들어, MySQL은 CPU의 11.6%, 메모리의 2.5%를 사용하고 있음을 확인할 수 있습니다.
top - 11:57:33 up 0 min, 1 user, load average: 3.69, 0.96, 0.32 Tasks: 165 total, 2 running, 113 sleeping, 0 stopped, 0 zombie %Cpu(s): 21.0 us, 5.5 sy, 0.0 ni, 70.5 id, 1.7 wa, 0.0 hi, 1.3 si, 0.0 st KiB Mem : 7637308 total, 5802888 free, 849512 used, 984908 buff/cache KiB Swap: 0 total, 0 free, 0 used. 6495648 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1986 netdata 20 0 1738856 191560 22948 S 11.6 2.5 0:02.30 mysqld 3021 www-data 20 0 255288 78420 55484 S 6.6 1.0 0:01.55 php-fpm 3138 www-data 20 0 253096 79780 59228 S 6.6 1.0 0:00.92 php-fpm 3153 www-data 20 0 255116 79088 56472 S 5.0 1.0 0:00.70 php-fpm 3037 www-data 20 0 257200 81088 56216 S 4.3 1.1 0:01.50 php-fpm 3048 www-data 20 0 257088 78740 55380 S 4.3 1.0 0:01.46 php-fpm 3054 www-data 20 0 254160 72168 52108 S 3.7 0.9 0:01.32 php-fpm 3135 www-data 20 0 255084 75912 54836 S 3.7 1.0 0:00.91 php-fpm 3051 www-data 20 0 254096 73804 51964 S 3.0 1.0 0:01.38 php-fpm 2962 www-data 20 0 45280 7284 3488 R 2.0 0.1 0:00.22 openresty 1062 netdata 20 0 338748 76144 6720 S 1.0 1.0 0:01.31 netdata 1702 netdata 20 0 21852 4232 2352 S 1.0 0.1 0:00.34 apps.plugin 1729 netdata 20 0 18636 3280 2764 S 0.7 0.0 0:00.05 bash 1980 netdata 20 0 62008 12896 5796 S 0.7 0.2 0:00.14 redis-server 11 root 20 0 0 0 0 I 0.3 0.0 0:00.14 rcu_sched 1007 root 20 0 1347424 74524 38872 S 0.3 1.0 0:00.92 dockerd 1857 root 20 0 10600 5564 4276 S 0.3 0.1 0:00.03 containerd-shim 2045 root 20 0 9948 6028 5016 S 0.3 0.1 0:00.14 forego 2934 root 20 0 13616 8760 5928 S 0.3 0.1 0:00.07 docker-gen 2966 systemd+ 20 0 25784 7924 2340 S 0.3 0.1 0:00.06 nginx
‘top’ 명령어는 대부분의 Linux 배포판에 기본적으로 설치되어 있습니다.
특정 프로세스를 식별한 후에는 해당 프로세스에만 집중하여 모니터링할 수 있습니다. 이때 ‘top’ 명령어를 다음과 같은 인자와 함께 사용할 수 있습니다.
프로세스 ID(PID)를 알고 있다면 아래와 같은 명령어를 사용합니다.
top -p $PID
예를 들어, PID가 3102인 프로세스를 모니터링하려면 다음과 같이 입력합니다.
top - 11:59:56 up 3 min, 1 user, load average: 0.72, 0.70, 0.31 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie %Cpu(s): 7.1 us, 2.9 sy, 0.0 ni, 89.1 id, 0.3 wa, 0.0 hi, 0.7 si, 0.0 st KiB Mem : 7637308 total, 5802024 free, 783672 used, 1051612 buff/cache KiB Swap: 0 total, 0 free, 0 used. 6555636 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3102 www-data 20 0 329500 82376 60640 S 0.0 1.1 0:03.35 php-fpm
‘top’ 명령어와 ‘grep’ 명령어를 함께 사용할 수도 있습니다. 아래는 Docker 관련 프로세스의 사용률을 확인하는 예시입니다.
[email protected]:~# top | grep docker 1007 root 20 0 1347424 74524 38872 S 0.3 1.0 0:01.38 dockerd 2934 root 20 0 14676 9652 5928 S 0.3 0.1 0:00.54 docker-gen 1007 root 20 0 1347424 74524 38872 S 0.3 1.0 0:01.39 dockerd 1007 root 20 0 1347424 74524 38872 S 1.0 1.0 0:01.42 dockerd 2934 root 20 0 14740 9652 5928 S 0.3 0.1 0:00.55 docker-gen 2934 root 20 0 14740 9652 5928 S 0.3 0.1 0:00.56 docker-gen
htop 명령어
‘htop’은 ‘top’과 유사하지만 더 많은 정보를 제공합니다. 특히 프로세스 경로를 식별하는 데 유용하며, 컬러풀한 인터페이스를 제공합니다.
‘htop’은 기본적으로 설치되어 있지 않을 수 있지만, 다음과 같이 간단하게 설치할 수 있습니다.
Ubuntu에 htop 설치
apt-get install htop
CentOS/RHEL 8.x에 htop 설치
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm dnf update dnf install htop
glances 명령어
‘glances’는 이름에서 알 수 있듯이, 한 화면에서 시스템 전반의 자원 사용률을 보여주는 도구입니다. CPU 사용률을 기준으로 프로세스를 정렬하여 보여줍니다.
CentOS 8에서는 아래와 같이 ‘dnf’를 사용하여 ‘glances’를 설치할 수 있습니다.
dnf install glances
CentOS 7에서는 ‘yum’을 사용할 수 있습니다.
yum install glances
atop 명령어
‘atop’은 앞에서 설명한 도구들과 비슷하지만, 출력을 파일에 기록하는 기능을 제공합니다. 예를 들어, 특정 시간에 문제가 발생하는 패턴이 있다면, ‘crontab’ 등을 사용하여 정기적으로 출력을 파일에 저장하고 나중에 분석할 수 있습니다.
파일에 출력을 기록하려면 다음과 같이 사용합니다.
atop -w filename
저장된 파일을 재생하려면 다음과 같이 사용합니다.
atop -r filename
‘atop’은 다양한 인자를 지원하므로 매뉴얼 페이지를 참고하는 것이 좋습니다.
실시간 문제 해결에만 관심이 있다면, ‘atop’을 실행하면 다음과 같은 화면을 볼 수 있습니다.
‘atop’은 아래와 같이 설치할 수 있습니다.
dnf install atop
ps 명령어
이제 ‘ps’ 명령어를 살펴보겠습니다.
‘ps’ 명령어와 PID를 사용하여 CPU 및 메모리 사용률을 확인할 수 있습니다.
ps -p $PID -o %cpu,%mem
출력 결과는 다음과 같아야 합니다.
[email protected]:~# ps -p 1048 -o %cpu,%mem %CPU %MEM 0.2 3.0 [email protected]:~#
nmon 명령어
‘nmon’은 CPU, 메모리, 디스크, 네트워크, NFS 및 가상 메모리 사용량을 대화형으로 모니터링하는 명령줄 도구입니다. 상위 프로세스(사용률 기준)를 보려면 ‘nmon’을 실행하고 ‘t’ 버튼을 누릅니다.
‘nmon’은 아래와 같이 설치할 수 있습니다.
dnf install nmon
Monit
Monit은 서버 자원, 데몬, 파일, 디렉터리, 파일 시스템 등을 모니터링하는 웹 기반 및 명령줄 오픈 소스 솔루션입니다.
‘Monit’은 멋진 위젯도 제공합니다.
가벼운 모니터링 소프트웨어이며, 다양한 기능을 제공합니다.
Monitorix
Monitorix는 Linux 서버를 모니터링하는 가벼운 오픈 소스 유틸리티입니다. Monitorix는 내장된 HTTP 서버를 통해 웹에서 시스템 사용률 및 기타 정보를 확인할 수 있습니다. 모니터링 기능은 다음과 같습니다.
- 커널/온도
- 파일 시스템 및 I/O
- 네트워크 트래픽
- Apache/메일/FTP/Nginx
- MySQL/Varnish/Memcached
또한 Monitorix는 알림 기능을 제공하여, 시스템에 문제가 발생했을 때 알림을 받을 수 있습니다. 클라우드 기반 서버를 관리하고 사전 모니터링 솔루션을 찾고 있다면 좋은 선택이 될 것입니다.
Netdata
Netdata는 시스템 리소스, 애플리케이션, 웹 서버, 데이터베이스, DNS, 메일, 하드웨어 센서 등에 대한 실시간 성능 모니터링 도구입니다. 오픈 소스이며, 설정이 쉽습니다. 모든 데이터는 대화형으로 시각화할 수 있도록 수집, 저장 및 스트리밍됩니다. 데이터는 1초마다 수집되므로 세밀한 모니터링이 가능합니다.
많은 업계 리더들이 Netdata를 사용하고 있습니다.
이제 Linux 서버를 제어해 보세요!
btop
btop은 Linux 서버를 관리하는 데 도움이 되는 아름다운 UI와 완전한 상호 작용 기능을 제공하는 편리한 자원 모니터입니다.
트리 보기에서 프로세스를 쉽게 시각화하고, 프로세스 목록에서 필터링하고, 많은 리소스를 관리할 수 있습니다. ‘btop’은 네트워크 사용량을 보여주는 자동 크기 조정 그래프를 제공합니다.
또한 디스크 속도와 I/O 활동을 확인할 수 있습니다.
Linux, FreeBSD 및 macOS에서 더 많은 기능을 경험할 수 있습니다.
결론
위에 소개된 도구들이 실시간으로 서버 사용량을 파악하고, 필요한 조치를 취하는 데 도움이 되기를 바랍니다. 시스템 관리자로 커리어를 시작하거나 더 많은 경험을 쌓고 싶다면 Udemy 강좌를 확인해 보세요.