从以上两个输出可以看出,官方 Nginx(监听 80 端口)的平均延迟为 9.19ms,而案例 Nginx(监听 8080 端口)的平均延迟为 43.6ms。从延迟分布上来看,官方 Nginx 可以在 9ms 内完成 90% 的请求;对于案例 Nginx,50% 的请求已经达到 44ms。
那么这里发生了什么呢?我们来做一些分析:
在 host1 中,让我们使用 tcpdump
捕获一些网络数据包:
$ tcpdump -nn tcp port 8080 -w nginx.pcap
现在,在 host2 上重新运行 wrk
命令
$ wrk --latency -c 100 -t 2 --timeout 2 http://192.168.0.30:8080/
当 wrk
命令完成后,再次切换回 Terminal 1(host1 的终端)并按 Ctrl+C 结束 tcpdump
命令。然后,用 Wireshark
把抓到的 nginx.pcap
复制到本机(如果 VM1(host1 的虚拟机)已经有图形界面,可以跳过复制步骤),用Wireshark
打开。
由于网络包的数量很多,我们可以先过滤一下。例如,选中一个包后,可以右键选择 “Follow”->“TCP Stream”,如下图:
然后,关闭弹出的对话框并返回 Wireshark
主窗口。这时你会发现 Wireshark
已经自动为你设置了一个过滤表达式 tcp.stream eq 24
。如下图所示(图中省略了源 IP 和目的 IP):