测量和解决Linux网络资源使用情况
测量网络使用情况并确定Debian Linux服务器上已建立的连接。
安装性能监控工具
如果尚未安装,请安装sysstat,vnstat和iftop:
# apt-get update && apt-get install sysstat vnstat iftop
对于RHEL/CentOS,请执行以下操作(必须启用EPEL存储库):
# yum install -y sysstat vnstat iftop
sysstat软件包包含我们今天将使用的sar和iostat系统性能工具。
确保在'/etc/default/sysstat'中启用了sar。
如果未启用,请执行此操作。
我们可能还希望将“/etc/sysstat/sysstat”中的历史记录值更改为不同于7天的值:
HISTORY=60
请注意,如果值大于28,则日志文件将保存在多个目录中,每个月一个。
默认情况下,sysstat将每10分钟收集一次数据。
我们可以通过修改cronjob'/etc/cron.d/sysstat'来更改此设置。
最后,重新启动服务:
# service sysstat restart
衡量网络使用情况
使用netstat的网络使用情况
netstat命令显示有关Linux网络子系统的信息。
默认情况下,netstat显示打开的套接字列表。
可以传递不同的参数以打印所需的信息类型。
下面列出了一些可用的参数:
- -a:同时显示侦听和非侦听套接字。
- -r:显示内核路由表。请注意,netstat -r和route -e产生相同的输出。但是,route -e命令需要root特权才能运行netstat -r不需要的特权。
- -i:显示所有网络接口的表。
- -e:显示其他信息。
- -p:显示每个套接字所属的程序的PID和名称。
- -l:仅显示监听套接字。
- -t:显示TCP连接。
- -u:显示UDP连接。
- -c:每秒连续打印选择的信息。
- -M:显示伪装的连接列表(仅适用于2.4之前的内核)。必须加载ipt_MASQUERADE模块。
在新内核(3.2 f.e.)上,出现以下消息:
$netstat -M netstat: no support for `ip_masquerade' on this system.
建议在新内核上使用“/proc/net/ip_conntrack”以获取伪装的连接列表。
使用数字端口和地址(-n)显示所有已建立的TCP(-t)连接:
$netstat -nt | grep -i established tcp 0 0 10.10.1.17:12 10.10.1.10:56839 ESTABLISHED tcp 0 0 10.10.1.17:53669 10.10.1.8:10050 ESTABLISHED tcp6 0 0 10.10.1.17:443 10.10.1.10:42590 ESTABLISHED tcp6 0 0 10.10.1.17:443 10.10.1.10:42606 ESTABLISHED tcp6 0 0 10.10.1.17:443 10.10.1.10:42605 ESTABLISHED
预览所有协议的网络统计信息(-s):
$netstat -s | less
vnstat的网络使用率
vnstat是基于控制台的网络流量监视器。
它记录选定接口的每小时,每日和每月网络流量。
显示eth0接口(-i)的网络使用情况:
$vnstat -i eth0 Database updated: Sat Mar 1 17:16:49 2014 eth0 since 02/17/14 rx: 1.87 GiB tx: 1.58 GiB total: 3.45 GiB monthly rx | tx | total | avg. rate ------------------------+-------------+-------------+-------------- Nov '14 1.61 GiB | 1.36 GiB | 2.97 GiB | 10.30 kbit/s Mar '14 129.66 MiB | 119.31 MiB | 248.97 MiB | 32.79 kbit/s ------------------------+-------------+-------------+-------------- estimated 5.42 GiB | 5.00 GiB | 10.43 GiB | daily rx | tx | total | avg. rate ------------------------+-------------+-------------+-------------- yesterday 156.53 MiB | 135.77 MiB | 292.30 MiB | 27.71 kbit/s today 129.66 MiB | 119.31 MiB | 248.97 MiB | 32.79 kbit/s ------------------------+-------------+-------------+-------------- estimated 179 MiB | 165 MiB | 344 MiB |
选择eth0接口(-i)并使用短模式(-s)显示流量:
$vnstat -i eth0 -s rx / tx / total / estimated eth0: Nov '14 1.61 GiB / 1.36 GiB / 2.97 GiB Mar '14 129.66 MiB /119.31 MiB /248.97 MiB / 10.43 GiB yesterday 156.53 MiB /135.77 MiB /292.30 MiB today 129.66 MiB /119.31 MiB /248.97 MiB / 344 MiB
实时显示eth0接口的当前传输速率,直到被中断为止。
如果运行时间超过10秒,则会在中断后显示统计信息:
# vnstat -i eth0 -l Monitoring eth0... (press CTRL-C to stop) rx: 0 kbit/s 0 p/s tx: 0 kbit/s 0 p/s^C eth0 /traffic statistics rx | tx --------------------------------------+----------------- bytes 176.99 MiB | 704.42 MiB --------------------------------------+----------------- max 242.34 Mbit/s | 251.37 Mbit/s average 16.29 Mbit/s | 64.84 Mbit/s min 0 kbit/s | 0 kbit/s --------------------------------------+----------------- packets 325642 | 123123 --------------------------------------+----------------- max 20681 p/s | 5966 p/s average 3658 p/s | 1383 p/s min 0 p/s | 0 p/s --------------------------------------+----------------- time 1.48 minutes
选择eth0接口(-i)并显示几天的流量(-d):
$vnstat -i eth0 -d eth0 /daily day rx | tx | total | avg. rate ------------------------+-------------+-------------+-------------- 02/17/14 43.75 MiB | 16.66 MiB | 60.41 MiB | 5.73 kbit/s 02/18/14 94.95 MiB | 88.40 MiB | 183.35 MiB | 17.38 kbit/s 12/20/14 0 KiB | 0 KiB | 0 KiB | 0.00 kbit/s 02/18/14 24.16 MiB | 16.39 MiB | 40.55 MiB | 3.84 kbit/s 02/19/14 147.66 MiB | 131.22 MiB | 278.89 MiB | 26.44 kbit/s 02/20/14 161.49 MiB | 134.28 MiB | 295.76 MiB | 28.04 kbit/s 02/21/14 169.64 MiB | 137.29 MiB | 306.93 MiB | 29.10 kbit/s 02/22/14 166.96 MiB | 142.06 MiB | 309.02 MiB | 29.30 kbit/s 02/23/14 166.68 MiB | 139.80 MiB | 306.48 MiB | 29.06 kbit/s 02/24/14 170.39 MiB | 144.82 MiB | 315.21 MiB | 29.89 kbit/s 02/25/14 157.14 MiB | 137.00 MiB | 294.14 MiB | 27.89 kbit/s 02/26/14 168.33 MiB | 138.85 MiB | 307.18 MiB | 29.13 kbit/s 02/27/14 160.50 MiB | 136.23 MiB | 296.73 MiB | 28.13 kbit/s 02/28/14 156.53 MiB | 135.77 MiB | 292.30 MiB | 27.71 kbit/s 03/01/14 129.66 MiB | 119.31 MiB | 248.97 MiB | 32.79 kbit/s ------------------------+-------------+-------------+-------------- estimated 179 MiB | 165 MiB | 344 MiB |
sar的网络使用
报告来自网络设备(DEV)的网络(-n)统计信息:
$sar -n DEV 1 2 Linux 3.2.0-4-686-pae (flames) 01/03/14 _i686_ (2 CPU) 17:25:57 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 17:25:58 lo 14.14 14.14 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: lo 7.04 7.04 0.38 0.38 0.00 0.00 0.00 Average: eth0 202.51 201.51 0.00 0.00 0.00 0.00 0.00
显示以下值(根据手册页):
- IFACE:报告其统计信息的网络接口的名称。
- rxpck/s:每秒接收的数据包总数。
- txpck/s:每秒传输的数据包总数。
- rxkB/s:每秒接收的千字节总数。
- txkB/s:每秒传输的千字节总数。
- rxcmp/s:每秒接收的压缩数据包数。
- txcmp/s:每秒传输的压缩数据包数。
- rxmcst/s:每秒接收到的组播数据包数。
从网络设备(DEV)开始(-s)1 PM和结束(-e)2 PM时间间隔报告历史网络(-n)统计信息:
$sar -n DEV -s 13:00:00 -e 14:00:00 Linux 3.2.0-4-686-pae (flames) 01/03/14 _i686_ (2 CPU) 13:05:01 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 13:15:01 0.00 13:45:01 eth0 137.24 143.68 0.00 0.00 0.00 0.00 0.00 13:55:01 lo 26.50 26.50 39.18 39.18 0.00 0.00 0.00 13:55:01 eth0 148.30 151.32 0.00 0.00 0.00 0.00 0.00 Average: lo 23.71 23.71 18.39 18.39 0.00 0.00 0.00 Average: eth0 146.13 149.66 0.00 0.00 0.00 0.00 0.00
为了获得最终的sar体验,请尝试以下命令:
$sar -n ALL 1 1
iftop的网络使用率
iftop命令显示指定接口或者它可以找到的第一个外部接口的网络带宽使用情况。
必须以足够的权限(通常以root用户身份)运行Iftop来监视所有网络流量。
在单独的行上获取所有具有发送和接收流量的TCP连接:
# iftop -nNPb -i eth0 -f tcp ---------------------------------------------------------------------------------- 10.10.1.17:12 => 10.10.1.10:56536 3.78kb 4.03kb 3.94kb <= 416b 493b 316b 10.10.1.17:51909 => 10.10.1.8:10050 0b 233b 61b <= 0b 232b 61b 10.10.1.17:51918 => 10.10.1.8:10050 0b 234b 61b <= 0b 231b 61b 10.10.1.17:51921 => 10.10.1.8:10050 1.14kb 233b 61b <= 1.13kb 232b 61b 10.10.1.17:51902 => 10.10.1.8:10050 0b 232b 61b <= 0b 232b 61b 10.10.1.17:51912 => 10.10.1.8:10050 0b 232b 61b <= 0b 232b 61b 10.10.1.17:51915 => 10.10.1.8:10050 0b 231b 61b <= 0b 231b 61b 10.10.1.17:443 => 10.10.1.10:42515 0b 42b 76.2kb <= 0b 42b 1.74kb 10.10.1.17:443 => 10.10.1.10:42509 0b 42b 1.94kb <= 0b 42b 1.39kb 10.10.1.17:443 => 10.10.1.10:42527 0b 42b 433b <= 0b 42b 495b ---------------------------------------------------------------------------------- TX: cum: 642kB peak: 1.62Mb rates: 4.92kb 5.63kb 135kb RX: 200kB 288kb 1.54kb 2.08kb 42.1kb TOTAL: 842kB 1.75Mb 6.46kb 7.72kb 177kb
使用的参数如下:
- -n:不进行主机名查找。
- -N:不将端口号解析为服务名称。
- -P:打开端口显示。
- -b:不显示流量条形图。
- -i:侦听指定接口上的数据包。
- -f:使用过滤器代码选择要计数的IP数据包。
获取显示的SSH端口12的总流量(请注意,我们在此处使用自定义SSH端口,默认值为TCP 22):
# iftop -nNPb -i eth0 -f "dst port 12" ------------------------------------------------------------------------------ 10.10.0.17:12 <=> 10.10.0.10:56536 160b 2.17kb 555b 10.10.0.17:12 <=> 10.10.0.10:36030 0b 1.68kb 431b 10.10.0.17:12 <=> 10.10.0.10:1692 160b 160b 194b ------------------------------------------------------------------------------ TX: cum: 0B peak: 0b rates: 0b 0b 0b RX: 15.0kB 11.0kb 160b 4.00kb 1.78kb TOTAL: 15.0kB 11.0kb 160b 4.00kb 1.78kb
提示:使用“ t”在四种线路显示模式之间循环;默认的2行显示(在单独的行上具有已发送和已接收的通信量)和3个1行显示(其中显示已发送,已接收或者总的通信量)。