Linux에서 프로세스의 네트워크 사용량을 모니터링하는 방법
인터넷은 현대 생활에서 필수적인 요소이지만, 어떤 리눅스 프로세스가 가장 많은 네트워크 연결을 사용하는지 궁금할 때가 있습니다. 다행히도, 몇 가지 유용한 리눅스 유틸리티를 활용하면 대역폭을 소모하는 프로세스를 간편하게 추적할 수 있습니다. 여기 몇 가지 대표적인 도구들을 소개합니다.
오늘의 MUO 비디오
계속해서 내용을 확인하려면 아래로 스크롤하세요.
1. NetHogs

NetHogs는 마치 htop이나 top이 CPU와 메모리 사용량을 보여주듯, 인터넷 연결을 사용하는 프로세스들을 실시간으로 보여주는 프로그램입니다. 네트워크에 접속하는 각 프로세스의 스냅샷을 제공합니다.
top, htop, atop과 유사하게 NetHogs는 주기적으로 화면을 업데이트하며, 각 프로세스별로 현재 네트워크 연결 상태를 보여줍니다. 이는 실시간으로 네트워크 사용량을 모니터링하는 데 매우 유용합니다.
NetHogs 설치는 매우 간단합니다. 패키지 관리자를 통해 손쉽게 설치할 수 있습니다.
예를 들어, 데비안 및 우분투에서는 다음 명령어를 사용합니다.
sudo apt install nethogs
아치 리눅스에서는 다음과 같습니다.
sudo pacman -S nethogs
Red Hat 계열에서는 아래 명령어를 입력합니다.
sudo dnf install nethogs
NetHogs를 실행하려면 관리자 권한이 필요합니다.
sudo nethogs
일반 사용자도 NetHogs를 실행할 수 있도록 설정하려면 다음 명령어를 사용할 수 있습니다.
sudo setcap "cap_net_admin,cap_net_raw+pe" /path/to/nethogs
여기서 “/path/to/nethogs”는 NetHogs의 실제 경로로 대체해야 합니다. `which` 명령어를 통해 경로를 확인할 수 있습니다.
which nethogs
2. lsof

lsof는 일반적으로 열린 파일을 나열하는 유틸리티이지만, 열린 네트워크 연결 정보도 제공할 수 있습니다. `-i` 옵션을 사용하면 시스템에서 실행 중인 프로세스에 연결된 네트워크 연결 목록을 보여줍니다. 리눅스 환경에서는 모든 것이 파일처럼 취급되기 때문입니다.
현재 네트워크 연결 상태를 보려면 다음 명령어를 사용하십시오.
lsof -i
lsof는 네트워크 연결이 열려 있는 모든 명령의 이름, PID, 파일 설명자, 연결 유형, 크기, 프로토콜, 그리고 연결의 파일 이름 등을 표시합니다.
`-i4` 및 `-i6` 옵션을 활용하면 IPv4 또는 IPv6 프로토콜을 사용하는 연결만 필터링하여 볼 수 있습니다.
lsof는 대부분의 시스템에 이미 설치되어 있을 가능성이 높습니다. 만약 설치되어 있지 않다면, 주요 리눅스 배포판의 패키지 관리자를 통해 쉽게 설치할 수 있습니다.
데비안과 우분투에서는 다음과 같이 입력합니다.
sudo apt install lsof
아치 리눅스에서는 아래 명령어를 사용합니다.
sudo pacman -S lsof
Red Hat 계열에서는 다음과 같습니다.
sudo dnf install lsof
3. netstat

netstat는 시스템의 네트워크 연결을 확인할 수 있는 강력한 도구입니다. 기본적으로는 네트워크 연결과 연결된 프로세스를 보여주지 않지만, lsof와 마찬가지로 명령줄 옵션을 통해 해당 정보를 확인할 수 있습니다.
netstat는 net-tools 패키지에 포함되어 있으며, 대부분의 리눅스 배포판에서 기본 패키지 관리자를 통해 설치할 수 있습니다.
예를 들어, 데비안이나 우분투에서는 다음 명령어를 사용합니다.
sudo apt install net-tools
아치 리눅스에서는 다음과 같습니다.
sudo pacman -S net-tools
Fedora, CentOS 및 RHEL에서는 netstat 설치를 위해 다음 명령어를 실행합니다.
sudo dnf install net-tools
명령줄에서 netstat를 실행하면 기본적으로 프로토콜, 주소, 연결 상태 등의 정보가 표시됩니다. `-p` 옵션을 추가하면 프로세스 ID와 명령 이름 열을 추가로 보여줍니다.
netstat -p
netstat 명령어를 실행하면 모든 네트워크 연결 정보를 나열하고 종료합니다. `-c` 옵션을 사용하면 실시간으로 업데이트되는 연결 목록을 확인할 수 있습니다.
netstat -pc
이는 NetHogs와 같은 화면 지향 프로그램을 사용하는 것과 유사하지만, 이 방법은 출력을 `grep` 또는 `pager`와 같은 다른 프로그램으로 전달하여 상세하게 검사할 수 있다는 장점이 있습니다.
netstat -p | grep 'systemd'
시스템에서 네트워크 연결을 사용하는 모든 프로세스를 보려면 관리자 권한으로 netstat를 실행해야 할 수 있습니다.
sudo netstat
이제 어떤 리눅스 앱이 대역폭을 소모하는지 확인할 수 있습니다.
현대 운영체제와 마찬가지로 리눅스 또한 인터넷과 밀접하게 연결되어 있습니다. 때때로 어떤 프로세스가 대역폭을 사용하는지 추적하기 어려울 수 있습니다. NetHogs, lsof, netstat와 같은 도구들을 사용하면 열린 연결을 가지고 있는 프로세스를 효과적으로 추적할 수 있습니다.
연결은 존재하지만 프로세스가 제대로 작동하지 않을 수도 있습니다. 리눅스에서는 이러한 비정상적인 프로세스를 쉽게 종료할 수 있습니다.