查看Linux每个进程的流量和带宽
原文:https://blog.csdn.net/monkeynote/article/details/45867803
作为一个系统管理员,有时候需要搞清楚一台机器上的哪个进程占用了较高的网络带宽。如果没有专用的工具,这并非易事。在这篇文章中,我们将要介绍这样的一款工具。在此之前呢,我们会尽量采用其它方法来获取某个进程占用多少带宽的相关信息。
我建议读者们也分享一些类似的命令行技巧或工具。
在Linux桌面上有许多的图形用户界面工具使用一些基于GUI的小程序来获取这类信息,但是大多数都只给出了整个系统所消耗的总带宽(没有显示单独某个进程的情况)。生产环境中的服务器不可能有基于GUI工具来获取这些信息,因此我们只会讨论一些命令行工具或者技巧。
第一种方法是使用iptraf 或 iftop 来确定发送流量最大的端口,然后从列表中找出哪个进程运行在该端口之上。我多次采用过这种方法,均达到了目的。
如果你刚听说 iftop 和 iptraf,我推荐你阅读下面这篇文章,解释了这两种工具如何使用。
阅读:Iptraf and Iftop command usage and examples
首先使用根据你使用的发行版选择YUM 或者apt-get 安装好iptraf 或 iptop。然后使用iptraf 命令找出流量使用情况和接口、端口信息。iptraf 会给出如下所示的输出。结果给出了两样东西,源地址和网络端口号。在第一次出现的welcome屏幕上按下Enter,就可以看见具体的选项了。一旦你选择了在所有接口之上的“IP traffic monitor”选项,你会看到如下的输出结果。
IPTraf
l TCP Connections (Source Host:Port) qqqqqqqqqq Packets qqq Bytes Flags Iface k
xl192.168.190.129:22 > 462 95456 -PA- eth0 x
xm192.168.190.1:49946 > 238 11688 --A- eth0 x
x x
x x
x x
x x
x x
x x
x x
x x
x x
x x
m TCP: 1 entries qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq Active qj
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x x
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
默认情况下,它会将connections按照每种usage排好序。我这儿可以很容易的找出哪个进程在使用22端口(当然是ssh)。你也可以使用netstat 命令来找到运行在这个端口上的进程。
root@ubuntu2:~# netstat -tunp | grep 22
tcp 0 64 192.168.190.129:22 192.168.190.1:49946 ESTABLISHED 1104/sshd: ubuntu [
root@ubuntu2:~#
- 1
- 2
- 3
或者,你也可以使用lsof 命令来找到运行在该端口的进程。
root@ubuntu2:~# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 671 root 3u IPv4 8584 0t0 TCP *:ssh (LISTEN)
sshd 671 root 4u IPv6 8595 0t0 TCP *:ssh (LISTEN)
sshd 1104 root 3u IPv4 9170 0t0 TCP 192.168.190.129:ssh->192.168.190.1:49946 (ESTABLISHED)
sshd 1120 ubuntu 3u IPv4 9170 0t0 TCP 192.168.190.129:ssh->192.168.190.1:49946 (ESTABLISHED)
- 1
- 2
- 3
- 4
- 5
- 6
你还可以使用和iptraf 类似的工具iftop ,来找出流量从哪些端口发送出去的。
root@ubuntu2:~# iftop -P
12.5kb 25.0kb 37.5kb 50.0kb 62.5kb
mqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqq
192.168.190.129:ssh => 192.168.190.1:49946 928b 1.13kb 1.67kb
<= 160b 160b 192b
192.168.190.129:56386 => 192.168.190.2:domain 0b 0b 30b
<= 0b 0b 30b
192.168.190.129:51953 => 192.168.190.2:domain 0b 0b 29b
<= 0b 0b 29b
192.168.190.129:53003 => 192.168.190.2:domain 0b 0b 29b
<= 0b 0b 29b
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TX: cum: 4.40kB peak: 3.75kb rates: 928b 1.13kb 1.76kb
RX: 698B 1.16kb 160b 160b 279b
TOTAL: 5.08kB 4.83kb 1.06kb 1.29kb 2.03kb
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
我们使用的-P 选项会在iftop 的输出结果中开启端口显示。我们要找到运行在该端口的进程,那么你可以用netstat 或者lsof 来找到相应的进程。
除了iftop 和 iptraf,你也可以使用jnettop。在ubuntu上可以用apt-get install jnettop命令很容易的安装好。装好之后,它可以显示出跟我们使用iptraf 和 iftop相似的结果。输出结果如下:
run 0:00:41 device eth0 pkt[f]ilter: none .
[c]ntfilter: on [b]ps=bytes/s [l]ocal aggr: none [r]emote aggr: none
[q]uit [h]elp [s]orting [p]ackets [.] pause [0]-[9] switch device
LOCAL <-> REMOTE TXBPS RXBPS TOTALBPS
(IP) PORT PROTO (IP) PORT TX RX TOTAL
192.168.190.129 <-> 192.168.190.1 252b/s 60b/s 312b/s
192.168.190.129 22 TCP 192.168.190.1 51394 11.4K 2.72K 14.1K
UNKNOWNv4 <-> UNKNOWNv4 14b/s 20b/s 34b/s
0.0.0.0 0 ARP 0.0.0.0 0 42b 60b 102b
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TOTAL 266b/s 80b/s 346b/s
11.7K 3.09K 14.8K
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
jnettop 命令在你希望监测一个特定的source和destination之间的流量的时候很有用。它给出了我们需要找到的那个进程所使用的端口信息。
不过还有专门为此目的设计的更好的工具。这就是nethogs。它和根据网络用途将进程排好序的top 命令很类似,很容易安装和使用。
如果你是在ReadHat/Centos系统上运行,那么你需要安装EPEL yum repo来安装nethogs。对Ubuntu用户来说,只需要用apt-get搞定。
root@ubuntu2:~# apt-get install nethogs
- 1
- 2
从nethogs 的man帮助文档上,你可以找到它的描述
DESCRIPTION
NetHogs is a small ‘net top’ tool. Instead of breaking the traffic down
per protocol or per subnet, like most such tools do, it groups band‐
width by process - and does not rely on a special kernel module to be
loaded. So if there’s suddenly a lot of network traffic, you can fire
up NetHogs and immediately see which PID is causing this, and if it’s
some kind of spinning process, kill it.
NetHogs 命令的用法和例子
装上了这个工具之后,使用起来就非常简单了。敲入nethogs 就会给出所有的信息。看下面的例子。
root@ubuntu2:~# nethogs
NetHogs version 0.8.0
PID USER PROGRAM DEV SENT RECEIVED
2214 root /usr/lib/apt/methods/http eth0 4.693 238.631 KB/sec
2051 ubuntu sshd: ubuntu@pts/1 eth0 3.442 0.310 KB/sec
1120 ubuntu sshd: ubuntu@pts/0 eth0 0.416 0.035 KB/sec
2213 root /usr/lib/apt/methods/http eth0 0.021 0.023 KB/sec
? root unknown TCP 0.000 0.000 KB/sec
TOTAL 8.572 239.000 KB/sec
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在它的输出结果中,给出了如下信息。这些详细的信息足够我们找到每个进程使用网络的情况。
- PID(进程ID)
- 运行该进程的用户
- 命令行或程序
- 流量将要去往网络接口
- 发送的字节数
- 接收的字节数
如果观察上面的输出结果,默认是按照由高到低排序的。
和top 命令一样,你也可以指定一个refresh rate,这样它会在屏幕上刷新结果。使用-d 选项即可。
root@ubuntu2:~# nethogs -d 1
- 1
- 2
现在它就会每秒刷新一次了。
和top 命令一样,它也有几个交互式命令。这些命令可以将输出结果按照发送或者接受数据的大小排序,将输出的方式从kb 更改成mb 等等。在交互式控制台敲入 m,显示结果会在kb/s, kb, b, mb之间切换。按下r会按照接收流量排序。按下s会按照发送流量排序。
请多多分享一下和nethogs类似的工具,或者其他有意思的方法可以找出每个进程占用网络的情况。
查看Linux每个进程的流量和带宽的更多相关文章
- 查看linux连接进程占用的实时流量 -nethogs
1.安装nethogs yum -y install nethogs 2.安装完成后,就可以执行命令 nethogs 3.实时查看进程流量,来个图显示 图中会显示当前的nginx产生的流量有多少都会清 ...
- 查看linux的进程到底用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存. ...
- 查看Linux某个进程打开的文件句柄(file descriptor)数量
先找到进程的pid 然后: lsof -p [pid] | wc -l 或者 ls /proc/[pid]/fd | wc -l 查看系统总共使用中的文件描述符数量: lsof | wc -l ref ...
- 查看linux 下进程运行时间(转)
原文地址:http://blog.csdn.net/tspangle/article/details/11731317 可通过ps 来查看,通过参数 -o 来查看 如: ps -eo pid,tty, ...
- 查看linux僵尸进程
top ps -A -o stat,ppid,pid,cmd | grep -e '^[zZ]' kill -HUP 进程号
- linux工具类之流量监视
iptraf 好用 yum install iptrafiptraf is an ncurses-based IP LAN monitor that generates various ...
- nethogs 查看 Linux 进程的网络使用
有时候我们客户会发现服务器或 VPS 网络慢,进一步发现大量带宽被占用,一些客户到这里为止就不知道怎么办了.有什么简单办法能找出哪个程序(或者进程)占用了带宽呢?Linux 监控流量的小工具不少,如 ...
- Linux下查看某一进程所占用内存的方法
Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id 可以看到是2913,现在可以使用如下命令查 ...
- linux查看主机端口进程命令
1.查看主机信息 # more /etc/hosts # Do not remove the following line, or various programs # that require ne ...
随机推荐
- python 1:列表和字典
初学Python, 对列表和字典的嵌套使用. phoneBook = [] #列表 list peopleInfo = {} #字典 dict i=0 while i<3: peopleInfo ...
- CSAPP lab1 datalab-handout
这是一个关于机器级的整数.浮点数表示和位运算的实验.要求用给定的操作符.尽可能少的操作数去实现对应的函数功能. 完整的实验包:链接: https://pan.baidu.com/s/1xUBi3XDl ...
- 获取url请求的参数值
function getURLParameter(name) { return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '( ...
- 稳定性 耗时 gc 过长问题排查 和工具
自己的另外一篇: http://www.cnblogs.com/fei33423/p/7805186.html 偶有耗时抖动? gc 也有长耗时? fullgc 也是? 有同学反馈 swap 可能导致 ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- C语言运算符_03
·运算符的优先级:C语言中,运算符的优先级共分为15级.1级最高,15级最低.在表达式中,优先级较高的先于优先级较低的进行运算.而在同一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合 ...
- js函数式编程(三)-compose和pointFree
compose即函数嵌套组合 组合compose在第一篇已经初见端倪,可以感受一下.compose函数的实现用闭包的方法.不完善实现如下: const compose = (f, g) => { ...
- CSS3-transform3D
CSS3 3D位移 在CSS3中3D位移主要包括两种函数translateZ()和translate3d().translate3d()函数使一个元素在三维空间移动.这种变形的特点是,使用三维向量的坐 ...
- verilog behavioral modeling--blocking and nonblocking
BLOCKIN ...
- Luogu 2216 [HAOI2007]理想的正方形 (单调队列优化)
题意: 给出一个 N×M 的矩阵,以及一个数值 K ,求在给定的矩阵中取出一个 K×K 的矩阵其中最大值减去最小值的最小值. 细节: 没有细节来发暴力走天下,20分也是分啊~~~ QAQ. 分析: 感 ...