场景:腾讯云 CVM 对外提供文件下载服务,购买的公网出带宽是 100Mbps,系统为 Ubuntu 22.04,前面用 Nginx 提供静态文件,文件存放在数据盘上,单文件大小几百 MB 到几 GB。 现象: 1. 多个客户端并发下载时,服务器出方向带宽长期只有 30 到 40Mbps,远低于购买的带宽。 2. 云监控里 CPU 使用率不高,内存也充足,但磁盘读取偶尔有明显的等待。 3. 用 iperf3 在另一台机器上测试到该实例的网络吞吐,可以接近标称值,所以网络本身看起来没有问题。 已尝试: 1. 调大了 Nginx 的 worker_connections,没有明显变化。 2. 没有开启 sendfile 和 tcp_nopush,也没有调整过输出缓冲相关的参数。 3. 数据盘使用的是普通云硬盘,没有查看过它的 IOPS 和吞吐上限。 想请教: 1. 如何用 iostat、sar 和 ss 等工具,在下载高峰期快速判断瓶颈到底在磁盘读、TCP 发送窗口还是应用层? 2. 云硬盘的吞吐上限对大文件顺序读有什么影响,应该看监控里的哪些指标来确认是否触顶? 3. Nginx 里 sendfile、aio、output_buffers、directio 这些参数对大文件下载分别起什么作用,应该怎样组合? 4. 单个 TCP 连接受往返延迟和窗口限制时,客户端远距离下载速度上不去,服务端有哪些参数可以调整,如何验证?
相似问题