博文

目前显示的是标签为“网络”的博文

服务器丢包分析-iptables规则-MTU大小设置错误-perf-火焰图分析处理请求时内核线程调用

图片
服务器丢包分析–iptables规则以及MTU大小设置错误 容器利用 Linux 内核提供的命名空间技术,将不同应用程序的运行隔离起来,并用统一的 镜像,来管理应用程序的依赖环境。这为应用程序的管理和维护,带来了极大的便捷性,并 进一步催生了微服务、云原生等新一代技术架构。 容易发生启动过慢、运行一段时间后 OOM 退出等问题。容器化后,应用程序会通过命名空间进行隔离。所以,你在分析时,不要忘了** 结合命名空间、cgroups、iptables **等来综合分析: cgroups 会影响容器应用的运行; iptables 中的 NAT,会影响容器的网络性能; 叠加文件系统,会影响应用的 I/O 性能等。 数据包还没传输到应用程序中, 就被丢弃了。这些被丢弃包的数量,除以总的传输包数,也就是我们常说的丢包率。丢包通常会带来严重的性能下降,特别是对 TCP 来说,丢包通常意味着网络拥塞和重传, 进而还会导致网络延迟增大、吞吐降低。 丢包模拟 1 docker run --name nginx --hostname nginx --privileged -p 80:80 -itd feisky/nginx:drop 没有使用 ping,是因为 ping 基于 ICMP 协议,而 Nginx 使 用的是 TCP 协议。 -c 表示发送 10 个请求,-S 表示使用 TCP SYN,-p 指定端口为 80 hping3 -c 10 -S -p 80 10.211.55.66 RTT 也有非常大的波动变化,小的时候只 有 0.3ms,而大的时候则有 3s。 3s 的 RTT ,很可能是 因为丢包后重传导致的。 流程分析 各层分析 VM1 的网络和内核配置也没问题。这样 一来,有可能发生问题的位置,就都在容器内部了。 1 2 docker exec -it nginx bash 链路层 当缓冲区溢出等原因导致网卡丢包时,Linux 会在网卡收发数据的统计信息中,记录下收发错误的次数。 你可以通过 ethtool 或者 netstat ,来查看网卡的丢包记录。 netstat -i 输出中的 RX-OK、RX-ERR、RX-DRP、RX-OVR ,分别表示接收时的总包数、总错误数、 进入 Ring Buffer 后因其他原因(如内存不足)导致的丢包数以及 Ring Buf...