linux性能优化-网络
7层OSI模型
MTU
网络接口配置的最大传输单元 MTU , 规定了最大的ip包大小, 常用的以太网中 MTU的默认值为 1500, 超过这个大小, 就会在网络层分片后的ip包不大于MTU, MTU 越大 需要分包就越少,自然网络吞吐能力就越强
网络包处理流程
网络性能指标
- 带宽
- 延迟
- 吞吐量
- pps
网络可用性
丢包率
并发连接数
重传率
网络io模型
i/o事件的通知方式, 水平触发和边缘触发
- 水平触发: 只要文件描述符可以非阻塞的执行i/o,就会触发通知, 也就是说程序可以随时检查文件描述符的状态,然后在根据状态进行io操作
- 边缘触发: 只有在文件描述符的状态发生改变, 也就是io请求达到时,才会发送一次通知, 这时候 应用程序就需要尽可能多的执行i/o 直到无法继续读写.才可以停止,如果io没有执行完, 或者因为某些原因没来的急处理 那么这次通知就丢失了
PPS测试工具
pktgen
TCP UDP 性能测试
iperf和netperf都是最常用的网络性能测试工具, 测试tcp udp 的吞吐量.
1 |
|
在目标机器上面启动服务端
1 |
|
在另一台机器上运行iperf客户端进行测试
1 |
|
然后查看 iperf的报告,
1 |
|
最后的 SUM 行就是测试的汇总结果,包括测试时间、数据传输量以及带宽等。按照发送和接收,这一部分又分为了 sender 和 receiver 两行。
从测试结果你可以看到,这台机器 TCP 接收的带宽(吞吐量)为 860 Mb/s, 跟目标的 1Gb/s 相比,还是有些差距的。
http性能测试
ab : apache自带的http压测工具, 主要测试http服务的每秒请求数, 请求延迟 吞吐量以的分布情况等
1 |
|
测试nginx性能为例:
1 |
|
可以看到,ab 的测试结果分为三个部分,分别是请求汇总、连接时间汇总还有请求延迟汇总。以上面的结果为例,我们具体来看。
在请求汇总部分,你可以看到:
Requests per second 为 1074;
每个请求的延迟(Time per request)分为两行,第一行的 927 ms 表示平均延迟,包括了线程运行的调度时间和网络请求响应时间,而下一行的 0.927ms ,则表示实际请求的响应时间;
Transfer rate 表示吞吐量(BPS)为 890 KB/s。
连接时间汇总部分,则是分别展示了建立连接、请求、等待以及汇总等的各类时间,包括最小、最大、平均以及中值处理时间。
最后的请求延迟汇总部分,则给出了不同时间段内处理请求的百分比,比如, 90% 的请求,都可以在 274ms 内完成
应用负载性能测试
wrk : http性能测试工具, 内置luaJIT 根据实际需求, 生成所需的请求负载, 或者自定义响应处理方法
wrk安装: 通过源码编译安装即可
1 |
|
测试nginx性能
1 |
|
这里使用 2 个线程、并发 1000 连接,重新测试了 Nginx 的性能。你可以看到,每秒请求数为 9641,吞吐量为 7.82MB,平均延迟为 65ms,比前面 ab 的测试结果要好很多。
当然,wrk 最大的优势,是其内置的 LuaJIT,可以用来实现复杂场景的性能测试。wrk 在调用 Lua 脚本时,可以将 HTTP 请求分为三个阶段,即 setup、running、done,如下图所示:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!