2017年06月02日 17:49:30 GoRustNeverStop 阅读数:7229更多linux
我的分类: linux/unixubuntu
服务器在作测试的时候,须要监控网络流量,用来了解在不一样人数的时候服务器的网络使用量。小程序
咱们使用服务器环境是centos7,centos下一般使用iftop,或者nethogs来进行网络流量监控。这2个工具都须要先安装epel,由于这个库一般操做系统是不自带的。centos
那么就先安装epel,使用的命令是:服务器
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm网络
在epel安装成功以后,接下来咱们就能够用yum安装iftop和nethogs。dom
原文 http://www.slashroot.in/find-network-traffic-and-bandwidth-usage-process-linux,译者FJ. 请联系fj_wind(at)126.comssh
做为一个系统管理员,有时候须要搞清楚一台机器上的哪一个进程占用了较高的网络带宽。若是没有专用的工具,这并不是易事。在这篇文章中,咱们将要介绍这样的一款工具。在此以前呢,咱们会尽可能采用其它方法来获取某个进程占用多少带宽的相关信息。tcp
我建议读者们也分享一些相似的命令行技巧或工具。工具
在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
默认状况下,它会将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:~#
或者,你也可使用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)
你还可使用和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
咱们使用的-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
jnettop 命令在你但愿监测一个特定的source和destination之间的流量的时候颇有用。它给出了咱们须要找到的那个进程所使用的端口信息。
不过还有专门为此目的设计的更好的工具。这就是nethogs。它和根据网络用途将进程排好序的top 命令很相似,很容易安装和使用。
若是你是在ReadHat/Centos系统上运行,那么你须要安装EPEL yum repo来安装nethogs。对Ubuntu用户来讲,只须要用apt-get搞定。
root@ubuntu2:~# apt-get install nethogs
从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
在它的输出结果中,给出了以下信息。这些详细的信息足够咱们找到每一个进程使用网络的状况。
若是观察上面的输出结果,默认是按照由高到低排序的。
和top 命令同样,你也能够指定一个refresh rate,这样它会在屏幕上刷新结果。使用-d 选项便可。
root@ubuntu2:~# nethogs -d 1
如今它就会每秒刷新一次了。
和top 命令同样,它也有几个交互式命令。这些命令能够将输出结果按照发送或者接受数据的大小排序,将输出的方式从kb 更改为mb 等等。在交互式控制台敲入 m,显示结果会在kb/s, kb, b, mb之间切换。按下r会按照接收流量排序。按下s会按照发送流量排序。
请多多分享一下和nethogs相似的工具,或者其余有意思的方法能够找出每一个进程占用网络的状况。