서버 리소스 실시간 모니터링 툴 소개 (top, htop, iostat 등)
서버를 한두 대만 다룰 때는 몰랐는데, 서비스 하나 운영하고 트래픽 좀 몰리기 시작하니까 리소스 모니터링이 얼마나 중요한지 알겠더라. 나도 처음엔 ‘서버가 느려진다’는 말만 듣고 어디서 병목이 생겼는지 감도 안 왔었는데, 그때부터 하나하나 툴을 써보면서 CPU, 메모리, 디스크, 네트워크 리소스를 실시간으로 체크하는 습관이 생겼다. 특히 리눅스에서는 텍스트 기반이지만 강력한 툴들이 꽤 많다. 오늘은 그중에서도 내가 가장 자주 쓰는 top, htop, iostat 중심으로 얘기해보려고 한다.
먼저 top. 리눅스 서버에서 제일 기본이 되는 모니터링 명령어다. top 치면 CPU 사용률, 메모리, 스왑, 그리고 현재 실행 중인 프로세스 목록이 주르륵 뜨는데, 이게 보기엔 투박해도 꽤 유용하다. 특히 상단에 load average 값을 보면 현재 서버가 얼마나 바쁜지 바로 감이 온다. 예전에 갑자기 서버가 멈춘 것처럼 느려져서 top 돌려봤더니 load average가 10을 넘고 있었다. 알고 보니 하나의 Node.js 프로세스가 무한 루프에 빠져서 CPU를 다 잡아먹고 있던 거였다. 그 이후로는 top이 내 서버 첫 응급처치 도구가 됐다.
근데 솔직히 말해서 top은 좀 불편하다. 정렬도 직관적이지 않고, 한눈에 딱 들어오지 않는다. 그래서 내가 더 자주 쓰는 게 바로 htop. 이건 top의 시각화 버전 같은 느낌이다. 설치는 sudo apt install htop 한 줄이면 되고, 실행하면 컬러로 구분된 CPU/메모리 막대 그래프, 각 프로세스의 상태가 깔끔하게 표시된다. 마우스도 사용할 수 있고, 인터페이스도 직관적이라 훨씬 보기 편하다. 특히 CPU 코어별 사용률이 따로 보이기 때문에, 멀티코어 기반 프로세스가 어느 쪽에서 병목 생기는지도 바로 확인 가능하다. top으로는 못 보던 세부 정보가 htop에선 자연스럽게 눈에 들어온다. 서버 부하 생겼을 때 htop 한 번 돌리면 원인 파악이 진짜 빠르다.
다음은 iostat. 이건 CPU와 디스크 입출력(I/O)을 모니터링하는 데 특화된 툴이다. 사실 서버에서 CPU랑 메모리만 보는 사람들이 많은데, 실제로 문제를 일으키는 건 디스크 I/O인 경우도 꽤 많다. 예를 들어 로그 파일 계속 쓰거나, DB가 디스크 병목 생기면 시스템 전체가 버벅인다. iostat은 그런 문제를 찾아내는 데 딱 좋다. 설치는 sudo apt install sysstat 하고 나서 iostat -x 1처럼 실행하면 된다. -x는 확장 출력, 1은 1초마다 갱신이란 뜻이다.
여기서 await라는 항목을 꼭 보자. 이건 디스크 I/O 작업이 얼마나 대기 중인지 보여주는 건데, 수치가 수십 ms 이상이면 뭔가 이상하다는 신호다. 나는 한 번 MySQL 서버에서 await 값이 300ms 넘게 유지되는 걸 보고, 알고 보니 다른 백업 스크립트가 디스크를 점유하고 있었던 걸 알게 됐다. 그 이후론 스토리지 문제도 항상 체크한다.
이 외에도 상황에 따라 vmstat, netstat, iftop, nmon, glances 같은 툴도 쓸 수 있지만, 내가 실무에서 정말 자주 쓰는 건 딱 top, htop, iostat 이 세 가지다. 복잡한 설정 없이도 바로 확인할 수 있고, 대부분의 리눅스 배포판에서 바로 사용할 수 있다는 점이 크다.
추가 팁을 주자면, 모니터링은 실시간 확인도 중요하지만, 로그로 남겨서 기록을 보는 것도 필요하다. 특히 iostat 결과를 tee로 파일에 저장해두면, 문제 터졌을 때 그 직전 상황을 분석할 수 있어서 유용하다. 나도 한 번은 새벽에 서버 튄 적이 있어서 평소에 저장해놓은 iostat 기록 덕분에 원인을 추적할 수 있었다. 그 이후로 crontab 돌려서 5분 단위로 리소스 상태 저장해두고 있다.
결론적으로 말하면, 서버에서 뭔가 이상하다 싶으면 무조건 리소스부터 본다. 그리고 그걸 볼 수 있게 도와주는 도구가 바로 이 녀석들이다. 처음엔 top만 써도 충분하지만, htop, iostat까지 익숙해지면 훨씬 더 빠르게 원인을 잡을 수 있다. 실시간 모니터링은 일종의 감각이다. 눈으로 계속 보면서 서버의 평소 상태를 익혀두면, 나중에 진짜 문제가 생겼을 때 그 이상 징후를 빠르게 캐치할 수 있다. 지금이라도 가볍게 htop이나 iostat 한 번 쳐보는 것부터 시작해보면 좋겠다. 안 보는 것보다 백 번 낫다