案例
工具
- sar是一个系统活动报告工作,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据
- hping3 是一个可以构造 TCP/IP 协议数据包的工具,可以对系统进行安全审计、防火墙测试等。
- tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。
安装工具
1
|
$ apt-get install sysstat hping3 tcpdump
|
操作分析:
步骤1. 在第一个终端开启nginx,并检查是否正常开启
1
2
|
# 运行 Nginx 服务并对外开放 8080 端口
$ docker run -itd --name=nginx -p 80:8080 nginx
|
步骤2. 在第二个终端,运行hping3命令,模拟nginx的客户端请求
(docker.for.mac.host.internal
为容器请求宿主机的地址)
1
|
$ hping3 -S -p 8080 -i u100 docker.for.mac.host.internal
|
步骤3. 分析
- 在第一个终端执行命令 top
1
2
3
4
5
6
7
8
9
10
11
12
|
Processes: 374 total, 4 running, 1 stuck, 369 sleeping, 1485 threads 14:05:26
Load Avg: 4.07, 2.65, 1.95 CPU usage: 9.16% user, 42.46% sys, 48.37% idle
SharedLibs: 231M resident, 66M data, 36M linkedit.
MemRegions: 38000 total, 1782M resident, 171M private, 3301M shared.
PhysMem: 8100M used (1788M wired), 90M unused.
VM: 1740G vsize, 1992M framework vsize, 4414(64) swapins, 152514(0) swapouts.
Networks: packets: 1528667/100M in, 1566257/102M out. Disks: 158537/3132M read, 40820/1237M written.
PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE
790 com.docker.h 162.0 06:54.55 17/1 0 40 2496M+ 0B 85M- 738 785 running
228 symptomsd 95.9 00:23.21 3/1 2/1 84 5612K 0B 2740K 228 1 running
0 kernel_task 52.0 02:35.77 206/9 0 0 91M- 0B 0B 0 0 running
|
2.在第一个终端运行sar命令
1
2
3
4
5
6
7
8
|
# -n DEV 表示显示网络收发的报告,间隔 1 秒输出一组数据
$ sar -n DEV 1
打印
IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcs
eth0 12607.00 6304.00 664.86 358.11 0.00 0.00 0
docker0 6302.00 12604.00 270.79 664.66 0.00 0.00 0
lo 0.00 0.00 0.00 0.00 0.00 0.00 0
veth9f6bbcd 6302.00 12604.00 356.95 664.66 0.00 0.00
|
分析:
rxpck/s 和 txpck/s 分别表示每秒接收、发送的网络帧数,也就是 PPS
rxkB/s 和 txkB/s 分别表示每秒接收、发送的千字节数,也就是 BPS
对网卡 eth0 来说,每秒接收的网络帧数比较大,达到了 12607,而发送的网络帧数则 比较小,只有 6304;
每秒接收的千字节数只有 664 KB,而发送的千字节数更小,只有 358 KB。
3.在第一个终端运行tcpdump命令
1
2
3
4
5
|
# -i eth0 只抓取 eth0 网卡,-n 不解析协议名和主机名
# tcp port 80 表示只抓取 tcp 协议并且端口号为 8080 的网络帧
$ tcpdump -i eth0 -n tcp port 8080
# 打印
06:05:38.908736 IP 172.17.0.1.55372 > 172.17.0.2.80: Flags [F.], seq 807309568, ack 807308582, win 229, options [nop,nop,TS val 3353161100 ecr 1354799123], length 0
|
分析:表示网络帧从172.17.0.1.55372转发到172.17.0.2的80端口
总结
软中断 CPU 使用率(softirq)升高是一种很常见的性能问题.
碰到网络性能问题,优先使用sar和tcpdump,感觉tcpdump在网络抓包上面非常好用