我已进行以下调整以尝试消除packets pruned from receive queue
我在 netstat 中看到的问题,但我仍然看到每隔几分钟就会有几百个被修剪:
- 增加 net.core.rmem_max 至 33554432
- 增加 net.core.rmem_default 至 12582912
- 将 net.core.wmem_max 增加至 16777216
- 增加 net.ipv4.tcp_rmem 至 4096 12582912 33554432
- 将 net.core.netdev_max_backlog 增加到 5000
- 增加 net.core.dev_weight 至 256
- 将 net.ipv4.tcp_max_syn_backlog 增加到 8192
- 将 net.core.netdev_budget 增加到 400
- 启用 rps 和 rfs,将 rps_sock_flow_entries 设置为 32768,将 rps_flow_cnt 设置为 8192(4 个接收队列),并将 rps_cpus affinity 设置为 ff(所有核心)
- 将 net.core.somaxconn 增加到 8192
- 将应用程序的 rcv_buf 大小设置为 33554432
- 将应用程序的 tcp 连接侦听积压设置为 4096
这是一个在 i3.2xlarge 实例上运行 carbon-cache、carbon-c-relay、httpd 和 memcached 的石墨系统,网络吞吐量约为 2.5 亿字节/分钟。
CPU 使用率合理,空闲时间在 1% 到 30% 之间波动,平均 i/o 等待时间约为 10%。
iostat -mx 1 显示 %util 在 40% 到 95% 之间波动。
vmstat 显示等待运行时间的进程数在 1 到 12 之间波动。
free -m total used free shared buffers cached Mem: 61444 60976 467 0 7442 40391 -/+ buffers/cache: 13142 48302 Swap: 0 0 0
关于如何确定为什么数据包以每分钟约 25 个的速度被修剪以及如何解决此问题,您有什么想法吗?