Linux 内核技术实战课
邵亚方
前蘑菇街技术专家,Linux Kernel 活跃贡献者
23704 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
Linux 内核技术实战课
15
15
1.0x
00:00/00:00
登录|注册

16 套路篇 | 如何分析常见的TCP问题?

查看系统的网络状态,如丢包原因
查看所有TCP连接的详细信息
查看每个TCP连接的状态、接收队列大小、发送队列大小、本地IP和端口、远端IP和端口、打开该TCP连接的进程信息
统计和显示系统中所有的TCP连接状态
中断次数和上下文切换次数
CPU、磁盘I/O、网络、内存使用情况
工具推荐
内核版本需为4.16及以上
轻量级分析手段
开销较大,慎用
能力范围
抓包原理
nstat命令
netstat命令
ss命令
dstat -tcp
dstat工具
讨论tcpdump使用PACKET_MMAP方式解析内核缓冲区数据的好处
推荐使用TCP Tracepoints进行轻量级分析
考虑使用tcpdump抓包时需注意系统性能影响
使用ss替代netstat
TCP Tracepoints
tcpdump
分析手段掌握
课后作业
课堂总结
TCP问题分析工具
网络问题分析
如何分析常见的TCP问题?

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

你好,我是邵亚方。
对互联网服务而言, 网络问题是非常多的,而且很多问题的外在表现都是网络问题,这就需要我们从网络入手,分析清楚根本原因是什么。而要分析各种各样的网络问题,你必须掌握一些分析手段,这样在出现问题的时候,你就可以高效地找到原因。这节课我就带你来了解下 TCP 的常见问题,以及对应的分析套路。

在 Linux 上检查网络的常用工具

当服务器产生问题,而我们又不清楚问题和什么有关时,就需要运行一些工具来检查系统的整体状况。其中,dstat 是我们常用的一种检查工具:
$ dstat
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
8 1 91 0 0| 0 4096B|7492B 7757B| 0 0 |4029 7399
8 1 91 0 0| 0 0 |7245B 7276B| 0 0 |4049 6967
8 1 91 0 0| 0 144k|7148B 7386B| 0 0 |3896 6971
9 2 89 0 0| 0 0 |7397B 7285B| 0 0 |4611 7426
8 1 91 0 0| 0 0 |7294B 7258B| 0 0 |3976 7062
如上所示,dstat 会显示四类系统资源的整体使用情况和两个关键的系统指标。这四类系统资源分别是:CPU、磁盘 I/O、 网络和内存。两个关键的系统指标是中断次数(int)和上下文切换次数(csw)。而每个系统资源又会输出它的一些关键指标,这里你需要注意以下几点:
如果你发现某一类系统资源对应的指标比较高,你就需要进一步针对该系统资源做更深入的分析。假设你发现网络吞吐比较高,那就继续观察网络的相关指标,你可以用 dstat -h 来查看,比如针对 TCP,就可以使用 dstat -tcp:
$ dstat --tcp
------tcp-sockets-------
lis act syn tim clo
27 38 0 0 0
27 38 0 0 0
它会统计并显示系统中所有的 TCP 连接状态,这些指标的含义如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何分析常见的TCP问题,包括使用常用的网络分析工具和技巧。作者首先介绍了在Linux上检查网络的常用工具,如dstat、ss、netstat和nstat等命令,并详细讲解了它们的使用方法和注意事项。此外,作者还强调了tcpdump在网络问题分析中的重要性,以及推荐了轻量级追踪方式TCP Tracepoints。文章还总结了TCP问题分析的惯用套路,包括避免使用netstat命令、考虑使用tcpdump抓包以及了解并尝试使用TCP Tracepoints。最后,作者提出了课后作业问题,引发读者思考和讨论。整体而言,本文通过介绍常用的网络分析工具和技巧,帮助读者了解如何快速分析和解决TCP相关的网络问题。

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

全部留言(4)

  • 最新
  • 精选
  • 邵亚方
    置顶
    课后作业答案: - 请问 tcpdump 在解析内核缓冲区里的数据时,为什么使用 PACKET_MMAP 这种方式?你了解这种方式吗?这样做的好处是什么? 评论区有同学已经回答的很好了, “PACKET_MMAP减少了系统调用,不用recvmsg就可以读取到捕获的报文,相比原始套接字+recvfrom的方式,减少了一次拷贝和一次系统调用。”
    2020-10-11
    11
  • 那时刻
    请问老师Wireshark和tcpdump在实现原理上,是否也是监控网卡以内的行为?

    作者回复: wireshark跟tcpdump原理是一致的,都是在网卡软中断里抓包的,自然就无法抓取网卡里的错误,所以通常情况下都需要在两端同时抓包来比较。理解工具的原理要比会用工具更加重要。

    2020-09-24
    5
  • stackWarn
    1.感谢作者的总结,请教下ss命令或者读proc文件会进行加锁吗?如果会是否影响性能。proc下的meminfo会 2.bpf的性能好和tcpdump的性能差,如何理解。是否 3.后续会出实际的tracepoint或者stap之类的实际案件排查吗?

    作者回复: 1.会有锁,而且可能还会关中断,这可能会引起业务网络抖动,我们后面课程里有这方面的案例。 2. ebpf通常情况下性能损耗要小一些,因为他在内核里会进行处理,省去了很多无谓的流程开销,或者说它更有针对性,针对某个特定点来追踪,那么这个点之外的逻辑就不会受影响;而tcpdump一是处理流程长,更耗时,二是它不具有针对性,分析面广,这就导致它的开销大。 3. 这类案例的分析会更偏内核实现,比如借助tracepoint来观察内存申请细节,从tracepoint可以观察到gfp_nofs为什么会引起compact fail,然而这类案例对应用开发者或者运维人员太难了,因为很少有人知道gfs_nofs是什么,甚至很多内核开发者都不清楚. 所以这个课程里我会有意的忽略这些内核实现细节,降低内核的门槛,让更多的人更容易了解内核。不过在加餐篇里会有这方面的一些案例,因为我们这门课还是有内核开发者来看的。

    2020-09-24
    2
    3
  • stackWarn
    PACKET_MMAP减少了系统调用,不用recvmsg就可以读取到捕获的报文,相比原始套接字+recvfrom的方式,减少了一次拷贝和一次系统调用。
    2020-09-24
    1
    9
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部