Linux内核技术实战课
邵亚方
前蘑菇街技术专家,Linux Kernel活跃贡献者
新⼈⾸单¥9.9
2809 人已学习
课程目录
已更新 18 讲 / 共 23 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 如何让Linux内核更好地服务应用程序?
免费
Page Cache管理问题 (5讲)
01 基础篇 | 如何用数据观测Page Cache?
02 基础篇 | Page Cache是怎样产生和释放的?
03 案例篇 | 如何处理Page Cache难以回收产生的load飙高问题?
04 案例篇 | 如何处理Page Cache容易回收引起的业务性能问题?
免费
05 分析篇 | 如何判断问题是否由Page Cache产生的?
内存泄漏问题 (5讲)
06 基础篇 | 进程的哪些内存类型容易引起内存泄漏?
07 案例篇 | 如何预防内存泄漏导致的系统假死?
08 案例篇 | Shmem:进程没有消耗内存,内存哪去了?
09 分析篇 | 如何对内核内存泄漏做些基础的分析?
10 分析篇 | 内存泄漏时,我们该如何一步步找到根因?
TCP重传问题 (6讲)
11 基础篇 | TCP连接的建立和断开受哪些系统配置影响?
12 基础篇 | TCP收发包过程会受哪些配置项影响?
13 案例篇 | TCP拥塞控制是如何导致业务性能抖动的?
14 案例篇 | TCP端到端时延变大,怎样判断是哪里出现了问题?
15 分析篇 | 如何高效地分析TCP重传问题?
16 套路篇 | 如何分析常见的TCP问题?
内核态CPU利用率飙高问题 (1讲)
17 基础篇 | CPU是如何执行任务的?
Linux内核技术实战课
15
15
1.0x
00:00/00:00
登录|注册

13 案例篇 | TCP拥塞控制是如何导致业务性能抖动的?

邵亚方 2020-09-17
你好,我是邵亚方。这节课我来跟大家分享 TCP 拥塞控制与业务性能抖动之间的关系。
TCP 拥塞控制是 TCP 协议的核心,而且是一个非常复杂的过程。如果你不了解 TCP 拥塞控制的话,那么就相当于不理解 TCP 协议。这节课的目的是通过一些案例,介绍在 TCP 拥塞控制中我们要避免踩的一些坑,以及针对 TCP 性能调优时需要注意的一些点。
因为在 TCP 传输过程中引起问题的案例有很多,所以我不会把这些案例拿过来具体去一步步分析,而是希望能够对这些案例做一层抽象,把这些案例和具体的知识点结合起来,这样会更有系统性。并且,在你明白了这些知识点后,案例的分析过程就相对简单了。
我们在前两节课(第 11 讲第 12 讲)中讲述了单机维度可能需要注意的问题点。但是,网络传输是一个更加复杂的过程,这中间涉及的问题会更多,而且更加不好分析。相信很多人都有过这样的经历:
等电梯时和别人聊着微信,进入电梯后微信消息就发不出去了;
和室友共享同一个网络,当玩网络游戏玩得正开心时,游戏忽然卡得很厉害,原来是室友在下载电影;
使用 ftp 上传一个文件到服务器上,没想到要上传很久;
……
在这些问题中,TCP 的拥塞控制就在发挥着作用。

TCP 拥塞控制是如何对业务网络性能产生影响的 ?

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux内核技术实战课》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥9.9
立即订阅
登录 后留言

精选留言(4)

  • 我来也
    课后思考题:
    这个应该是不确定的。

    以前也测试过,只要在网络断开期间不主动发送数据,就会晚一点探测到连接已断开。
    如果不主动发数据,可能网络恢复时,连接就自动恢复了。

    作者回复: 对的!

    2020-09-18
    3
  • 董泽润
    连接是否正常,要看是否开启了 tcp_keepalive, 并且探测持续失败,连接才失效

    作者回复: 是的

    2020-09-17
    2
  • jssfy
    引用:对此,我们使用 tcpdump 在 server 上抓包后发现,Client 响应的 ack 里经常出现 win 为 0 的情况,也就是 Client 的接收窗口为 0。于是我们就去 Client 上排查,最终发现是 Client 代码存在 bug,从而导致无法及时读取收到的数据包。

    请问这里的前一句的接收窗口为0和后一句的代码bug是有什么逻辑关系吗?这里没太看懂

    作者回复: 哦 是应用被阻塞住 没有及时从缓冲区里读取数据 导致缓冲区满

    2020-09-19
  • webmin
    要分情况:
    1. 如果关闭网络是发生在Client端或Server端的机器上,那么网络恢复后连接不会正常;
    2. 如果关闭网络是发生在Client端与Server端之间链路中的某个路由节点上;
        2.1 Client端到Server端之间有多条路可用,只要不是和CS直连这个设备有问题,那么设备可以选择其它路走,这时连接还是正常的;
        2.2 Client端与Server端之间链路有NAT,且网络关闭发生与NAT端相关的设备上,那么连接就不正常;
        2.3 Client端与Server端之间只有一条路,只要不是和CS直连这个设备有问题,那么如果网络在发生tcp_keepalive之前恢复,那么连接还是正常的;
     3. 以上讨论的都是在TCP/IP协议情况下,网上查了一下SSH有居于UDP的方案(http://publications.lib.chalmers.se/records/fulltext/123799.pdf),如果走UDP的话这个要看SSH应用层的保活或SESSION有效期是否超过网络关闭时间,大小则可以连接,小于则关闭。

    作者回复: 很赞!总结的比较全面,很多因素都考虑到了。

    2020-09-18
    1
收起评论
4
返回
顶部