1. 서버 모니터링을 해야 하는 이유
서버를 운영하다 보면 갑자기 사이트가 느려지거나 응답이 없어지는 상황이 생깁니다. 이런 상황에서 어디서부터 문제를 찾아야 할지 막막할 수 있습니다.
서버 모니터링은 자동차 계기판을 보는 것과 같습니다. 연료 게이지, 엔진 온도, 속도계를 주기적으로 확인해야 문제가 커지기 전에 대응할 수 있듯, 서버의 CPU, 메모리, 디스크 상태를 체크해야 장애를 예방하고 빠르게 대응할 수 있습니다.
이 글에서는 별도 도구 설치 없이 리눅스 기본 명령어만으로 서버 상태를 파악하는 방법을 알아봅니다.
2. 전체 시스템 현황 확인 – top과 htop
top은 서버의 실시간 상태를 보여주는 기본 모니터링 도구입니다.
top
실행하면 두 구역으로 나뉜 화면이 나타납니다. 상단에는 시스템 전체 요약 정보가 표시됩니다. load average는 서버의 평균 부하를 1분, 5분, 15분 단위로 보여줍니다. 이 값이 CPU 코어 수보다 지속적으로 높으면 서버에 과부하가 걸린 것입니다. %Cpu 항목에서 id(idle) 값이 낮을수록 CPU가 바쁘게 동작 중임을 의미합니다.
하단에는 CPU와 메모리를 많이 사용하는 프로세스 목록이 표시됩니다. M 키를 누르면 메모리 사용량 기준으로, P 키를 누르면 CPU 기준으로 정렬됩니다. q 키로 종료합니다.
htop은 top의 개선 버전으로 컬러 그래픽과 마우스 조작을 지원해 훨씬 보기 편합니다. 기본 설치가 아니므로 아래 명령어로 설치합니다.
sudo apt install htop -y
설치 후 htop을 입력하면 CPU 코어별 사용률, 메모리, 스왑 사용량을 직관적인 막대 그래프로 확인할 수 있습니다.
3. 메모리 사용량 파악 – free 명령어
메모리 사용 현황을 빠르게 확인할 때는 free 명령어를 사용합니다.
free -h
-h 옵션을 붙이면 KB 대신 MB, GB 단위로 읽기 쉽게 표시됩니다.
출력 결과에서 가장 중요한 항목은 available 값입니다. 이 값이 전체 메모리의 20% 이하로 떨어지면 메모리 부족을 의심해 봐야 합니다. free 열은 완전히 비어 있는 메모리인데, 리눅스는 여유 메모리를 캐시로 활용하기 때문에 free 값보다 available 값이 실제 사용 가능 메모리를 더 정확하게 나타냅니다.
4. 디스크 공간 확인 – df와 du
디스크가 가득 차면 로그 기록, 파일 생성 등 모든 쓰기 작업이 실패해 서비스가 중단될 수 있습니다. 서버 장애의 의외로 흔한 원인 중 하나입니다.
전체 디스크 파티션별 사용량을 확인합니다.
df -h
Use% 항목이 90% 이상이면 즉시 정리가 필요합니다.
어느 폴더가 공간을 많이 차지하는지 확인하고 싶다면 du 명령을 사용합니다.
du -sh /var/log
이 명령어는 /var/log 폴더의 전체 용량을 요약해 보여줍니다. 특히 로그 파일은 방치하면 빠르게 공간을 차지하므로 주기적으로 확인하는 것이 중요합니다.
5. 네트워크 포트 상태 확인 – ss
현재 서버에서 어떤 포트가 열려 있는지, 어떤 프로세스가 사용 중인지 확인할 때 사용합니다.
ss -tuln
출력 결과에서 State가 LISTEN인 포트들이 현재 열려서 연결을 기다리는 포트입니다. 예상하지 못한 포트가 열려 있다면 보안상 점검이 필요합니다.
과거에는 netstat 명령어를 많이 사용했지만, 최신 Ubuntu에서는 ss를 사용합니다.
6. 프로세스 찾기와 종료 – ps와 kill
특정 프로세스를 찾거나 비정상적으로 자원을 많이 사용하는 프로세스를 종료해야 할 때 사용합니다.
현재 실행 중인 모든 프로세스를 보려면 아래 명령어를 사용합니다.
ps aux
출력량이 많기 때문에 보통 grep과 조합해 특정 프로세스만 필터링합니다. nginx 프로세스를 확인하는 예시입니다.
ps aux | grep nginx
프로세스 목록에서 확인한 PID(프로세스 번호)로 프로세스를 종료합니다.
kill 프로세스PID
응답이 없어 일반 종료가 안 될 때는 강제 종료합니다.
kill -9 프로세스PID
중요한 시스템 프로세스를 강제 종료하면 서버가 불안정해질 수 있으므로 주의가 필요합니다.
7. 이상 징후를 빠르게 발견하는 루틴
서버에 문제가 생겼을 때 빠르게 원인을 파악하는 루틴을 정리합니다.
첫 번째로 top 또는 htop으로 CPU 사용률과 부하를 확인합니다. 특정 프로세스가 CPU를 독점하고 있지 않은지 확인합니다.
두 번째로 free -h로 메모리 여유가 있는지 확인합니다. available 값이 거의 0이면 메모리 부족이 원인일 수 있습니다.
세 번째로 df -h로 디스크가 꽉 차지 않았는지 확인합니다.
네 번째로 관련 서비스의 로그 파일을 확인합니다. tail -f /var/log/nginx/error.log처럼 오류 로그를 실시간으로 확인합니다.
이 네 가지 단계만으로 대부분의 서버 문제 원인을 파악할 수 있습니다.
8. 정리 및 다음 단계
오늘 배운 명령어를 한눈에 정리합니다.
| 명령어 | 확인 항목 |
|---|---|
| top / htop | CPU·부하·프로세스 실시간 확인 |
| free -h | 메모리 사용 현황 |
| df -h | 디스크 파티션별 사용량 |
| du -sh 경로 | 특정 폴더 용량 확인 |
| ss -tuln | 열려 있는 포트 목록 |
| ps aux | 실행 중인 프로세스 목록 |
다음 글에서는 서버 로그 파일을 읽고 오류 원인을 추적하는 방법을 알아보겠습니다.