Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87258 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)

协议的收发汇总
网卡上的网络模拟排队规则
网卡丢包情况
网络层和传输层
链路层
案例分析
案例准备
Nginx 反向代理服务器的案例
Java 应用的性能问题
容器中的网络丢包问题
容器中运行的应用程序
容器化对应用程序性能的影响
容器化的优势
思考
容器化后的网络性能分析
容器化对应用程序性能的影响
服务器总是时不时丢包,我该怎么办?

该思维导图由 AI 生成,仅供参考

你好,我是倪朋飞。
上一节,我们梳理了,应用程序容器化后性能下降的分析方法。一起先简单回顾下。
容器利用 Linux 内核提供的命名空间技术,将不同应用程序的运行隔离起来,并用统一的镜像,来管理应用程序的依赖环境。这为应用程序的管理和维护,带来了极大的便捷性,并进一步催生了微服务、云原生等新一代技术架构。
不过,虽说有很多优势,但容器化也会对应用程序的性能带来一定影响。比如,上一节我们一起分析的 Java 应用,就容易发生启动过慢、运行一段时间后 OOM 退出等问题。当你碰到这种问题时,不要慌,我们前面四大基础模块中的各种思路,都依然适用。
实际上,我们专栏中的很多案例都在容器中运行。容器化后,应用程序会通过命名空间进行隔离。所以,你在分析时,不要忘了结合命名空间、cgroups、iptables 等来综合分析。比如:
cgroups 会影响容器应用的运行;
iptables 中的 NAT,会影响容器的网络性能;
叠加文件系统,会影响应用的 I/O 性能等。
关于 NAT 的影响,我在网络模块的 如何优化 NAT 性能 文章中,已经为你介绍了很多优化思路。今天,我们一起来看另一种情况,也就是丢包的分析方法。
所谓丢包,是指在网络数据的收发过程中,由于种种原因,数据包还没传输到应用程序中,就被丢弃了。这些被丢弃包的数量,除以总的传输包数,也就是我们常说的丢包率。丢包率是网络性能中最核心的指标之一。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在容器化环境中分析服务器丢包问题是一项复杂的任务,本文通过以Nginx为例,介绍了如何从链路层、网络层和传输层入手,分析网络丢包的问题。首先,文章介绍了容器化应用程序通过命名空间进行隔离,需要结合命名空间、cgroups、iptables等进行综合分析。然后,通过实际案例,读者可以了解如何使用hping3和curl工具来验证Nginx的正常访问情况,并从协议栈中逐层排查丢包问题。文章还提供了案例准备和分析的具体步骤,帮助读者快速了解并解决服务器丢包问题。总的来说,本文详实地介绍了在容器化环境中分析服务器丢包问题的方法,适合需要解决这一问题的技术人员阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 性能优化实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 无名老卒
    经过一夜的思考,终于搞明白了,使用iptables做了限制,删除这2条规则就正常Ping了。 root@nginx:/# iptables -nvL Chain INPUT (policy ACCEPT 84 packets, 3472 bytes) pkts bytes target prot opt in out source destination 51 2116 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 statistic mode random probability 0.29999999981 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 65 packets, 2960 bytes) pkts bytes target prot opt in out source destination 38 1716 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 statistic mode random probability 0.29999999981

    作者回复: 👍

    2019-05-04
    10
  • 亚洲-凯撒大帝
    netstat -s 的数据怎么重置呢

    作者回复: 这是从proc文件系统读出来的,重置只能重启

    2019-03-16
    3
  • 日拱一卒
    遇到过 ingress envoy -> 某组应用容器 时不时的容器访问 503的问题, 抓包放 wireshark 分析,发现有大量的 dup ack。 2个容器的机器指标正常, pod 指标正常。 至今不知道原因, 升级了操作系统内核后, 问题有所缓解,但是没有根本解决问题。 作者可否提供个思路?

    作者回复: 请参考文中(47和48篇)的思路分析

    2019-03-13
    2
  • 青石
    TCP缓冲区在溢出后,数据会被阻塞并不会丢弃,从netstat可以看到Recv-Q的值很大。 UDP缓冲区溢出,直接丢弃报文,从netstat -s可以看到UDP有大量的packet receive errors错误。 看了47、48节,并没有从套接字层排查问题是因为使用TCP协议的原因吗?

    作者回复: 我们这是丢包问题,只需要去分析netstat中有丢包的位置就可以了

    2019-03-21
    1
  • cheyang
    netstat -s中的failed connection attempts的ip源有办法定位到吗?

    作者回复: ss 查看SYN-SENT状态的连接;或者,使用tcpdump抓包

    2019-03-20
    1
  • H
    老师能详细解释下一TcpExt 里的指标分别是代表什么意思吗?

    作者回复: 这儿指标太多了,大部分还都是完整的英语句子,应该很好理解。如果有哪个不懂的,可以单独提出来

    2019-03-13
    1
  • 我来也
    [D47打卡] 不知为何,容器中的mtu值只有100, 即使`ifconfig eth0 mtu 1400`,丢包率也是依旧很高. 我这边的hping3结果中,有些看不懂的地方: DUP! len=44 ip=192.168.1.128 ttl=63 DF id=0 sport=80 flags=SA seq=2 win=27200 rtt=1018.3 ms len=44 ip=192.168.1.128 ttl=63 DF id=0 sport=80 flags=SA seq=4 win=27200 rtt=1032.7 ms DUP! len=44 ip=192.168.1.128 ttl=63 DF id=0 sport=80 flags=SA seq=2 win=27200 rtt=3034.1 ms 这里的DUP应该是重复了的意思吧. 老师这个案例太狠了,连链路层上都做了手脚.😐

    作者回复: 你这容器中mtu只有100是更狠呀😊 DUP表示收到了重复包

    2019-03-13
    2
    1
  • Frank
    老师 TcpExt: 表示什么项目哦?

    作者回复: 扩展TCP指标,相对于Tcp部分包含更多的指标

    2019-03-13
  • ninuxer
    打卡day50 还没来得及实践,思路是,在服务端用tcpdump抓包,然后导入wireshark分析~
    2019-03-13
    11
  • 陈靖
    在实际场景中,使用 netstat -s 的输出报告查看,可能混杂其他一些服务的输出,一些错误也比较混杂,所以这种整个系统的输出报告,参考价值可能不大
    2020-07-11
    7
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部