一、网络基准测试
Linux 网络基于 TCP/IP 协议栈,而不同协议层的行为显然不同。
评估的网络性能,需要确定评估协议栈的哪一层。
1. 基于 HTTP 或者 HTTPS 的 Web 应用程序,属于应用层,应该测试 HTTP/HTTPS 的性能;
2. 对大多数游戏服务器来说,通常会基于 TCP 或 UDP ,与客户端进行交互,应该测试TCP/UDP 的性能;
3. 把 Linux 作为一个软交换机或者路由器来用的,更关注网络包的处理能力(即 PPS),应该测试网络层的转发性能;
二、各层测试说明
1. HTTP 性能测试
服务端运行nginx
客户端运行ab命令 ( webbench 工具也是可以的)
重点数据:
(1) Requests per second 为 1074;
(2) 每个请求的延迟(Time per request)分为两行,
第一行的 927 ms 表示平均延迟,包括了线程运行的调度时间和网络请求响应时间。
下一行的 0.927ms ,则表示实际请求的响应时间。
(3) Transfer rate 表示吞吐量(BPS)为 890 KB/s。
2. TCP/UDP 性能测试
iperf 和 netperf 都是最常用的网络性能测试工具,测试 TCP 和 UDP 的吞吐量。
它们都以客户端和服务器通信的方式,测试一段时间内的平均吞吐量。
服务端运行:
客户端运行:
稍等一会儿(15 秒)测试结束后,回到目标服务器,查看 iperf 的报告:
3. PPS 转发性能性能测试
(1) hping3
(2) pktgen : Linux 内核自带的高性能网络测试工具
具体查看原帖: https://mp.weixin.qq.com/s/BS6gdbWSZ_dD14VoXSnjeA
测试结果为PPS 为 12 万,吞吐量为 61 Mb/s。
千兆交换机的 PPS,也可以达到 150 万 PPS,比这里测试得到的 12 万大多了。
三、应用负载性能
1. 得到 TCP、HTTP 等的性能数据后,不能 表示应用程序的实际性能。
因为用户请求会附带着各种各种的负载,而这些负载会影响 Web 应用程序内部的处理逻辑,从而影响最终性能。
2. wrk是一个 HTTP 性能测试工具,内置了 LuaJIT,方便根据实际需求,生成所需的请求负载或自定义响应的处理方法。
3. 性能工具本身的性能,对性能测试也是至关重要的。
不合适的性能工具,并不能准确测出应用程序的最佳性能。