How can I monitor network I/O usage per process under Linux?
Such known tools like iftop/iptraf display network I/O per interface and per connection. Is there a way to see network I/O statistics per process?
Solution 1:
nethogs looks like it will do what you want.
EDIT: I needed to install ncurses-devel, libpcap and libpcap-devel to build.
Solution 2:
To find what connections are associated with each process, use lsof. For example:
lsof | grep TCP
That will give you a list of connections, like this:
bash 10887 luke 3u IPv4 44638801 0t0 TCP littleyerry.example.com:55212->barista.example.com:ldap (ESTABLISHED)
bash 10913 luke 3u IPv4 44638905 0t0 TCP littleyerry.example.com:55216->barista.example.com:ldap (ESTABLISHED)
ssh 10935 luke 3u IPv4 44639001 0t0 TCP littleyerry.example.com:55219->barista.example.com:ldap (ESTABLISHED)
ssh 10935 luke 4u IPv4 44639008 0t0 TCP littleyerry.example.com:59459->launchpad.example.com:ssh (ESTABLISHED)
bash 10938 luke 3u IPv4 44639107 0t0 TCP littleyerry.example.com:55221->barista.example.com:ldap (ESTABLISHED)
From there, you should be able to find out about each connection individually using the tools you mentioned (iftop, iptraf). You could build a small script to aggregate the specific data that you're looking for.