Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?

倪朋飞 2019-02-18
你好,我是倪朋飞。
上一节,我们学习了 DNS 性能问题的分析和优化方法。简单回顾一下,DNS 可以提供域名和 IP 地址的映射关系,也是一种常用的全局负载均衡(GSLB)实现方法。
通常,需要暴露到公网的服务,都会绑定一个域名,既方便了人们记忆,也避免了后台服务 IP 地址的变更影响到用户。
不过要注意,DNS 解析受到各种网络状况的影响,性能可能不稳定。比如公网延迟增大,缓存过期导致要重新去上游服务器请求,或者流量高峰时 DNS 服务器性能不足等,都会导致 DNS 响应的延迟增大。
此时,可以借助 nslookup 或者 dig 的调试功能,分析 DNS 的解析过程,再配合 ping 等工具调试 DNS 服务器的延迟,从而定位出性能瓶颈。通常,你可以用缓存、预取、HTTPDNS 等方法,优化 DNS 的性能。
上一节我们用到的 ping,是一个最常用的测试服务延迟的工具。很多情况下,ping 可以帮我们定位出延迟问题,不过有时候, ping 本身也会出现意想不到的问题。这时,就需要我们抓取 ping 命令执行时收发的网络包,然后分析这些网络包,进而找出问题根源。
tcpdump 和 Wireshark 就是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(22)

  • 1+1
    wireshark的使用推荐阅读林沛满的《Wireshark网络分析就这么简单》和《Wireshark网络分析的艺术》

    作者回复: 👍 这两本书都不错

    2019-02-18
    16
  • 蓝雾里的部落
    林沛满的书都看过,确实写的相当好,都是案例驱动。
    把协议讲的生动有趣就数他。

    作者回复: 👍

    2019-02-18
    11
  • w3c10kt
    tcpdump抓包可以用来处理一些疑难问题的。 如受到了什么类型的攻击,执行了mysql的什么命令,接收以及发送出去了什么数据包通通都可以。像入侵检测如snort工具之类的应该也是对数据包进行抓包分析的,很实用,很强大。

    作者回复: 👍 谢谢分享

    2019-02-19
    5
  • Geek_96e358
    之前公司一个内部应用出现页面卡顿,而且每次都是1-2用户反馈(随机),排出了应用本身,服务器,客户端网络问题后,然后让it在用户端抓包传给我,然后用Wireshark分析后,发现有大量虚假重传,后面分析后发现,是用户都在一个Nat网络后面,部分用户时间不一致,同时我们服务器开启了tcp快速回收,导致连接被回收了。后面关闭tcp快速回收后解决。也是第一次用工具分析这种比较复杂的问题。

    作者回复: 👍

    2019-04-13
    1
    4
  • 科学Jia
    老师,这个案例写的极其生动:D, 就是问一句,现在我们的项目都是https,那么如果抓包https,tcpdump或者wireshark是否可以解密?因为我看到wireshark解密需要private key,但是private key涉及安全问题,肯定都拿不到,那么你们遇到抓包https后解析是怎么做的呢?

    作者回复: 嗯,证书解密是最简单的方法,也可以使用 MitM(Man-in-the-middle)方法

    2019-03-05
    1
    4
  • 明翼
    老师wireshark有个命令行版本tshark,wireshark是通过一个叫dump的进程抓包管道方式发送给tshark解析的,不过tshark的命令项有点多,不是太好用

    作者回复: 👍 没有图形界面的时候,tshark也是个选择

    2019-02-18
    4
  • kissingers
    林沛满的书不错,EMC 大牛值得推荐。
    Fiddler,工具也了解过,微软的人写的,支持https (man in middle),能修改请求和响应数据包。
    另外老师能讲讲:linux 主机上怎么提高数据转发性能吗?

    作者回复: 优化方法里面有提到

    2019-03-07
    2
  • bzadhere
    "如果看了这个你还是不会用Wireshark,那就来找我吧" ----这是在网上可以找到最牛逼的资料

    https://www.dell.com/community/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E8%AE%A8%E8%AE%BA%E5%8C%BA/%E5%A6%82%E6%9E%9C%E7%9C%8B%E4%BA%86%E8%BF%99%E4%B8%AA%E4%BD%A0%E8%BF%98%E6%98%AF%E4%B8%8D%E4%BC%9A%E7%94%A8Wireshark-%E9%82%A3%E5%B0%B1%E6%9D%A5%E6%89%BE%E6%88%91%E5%90%A7-8%E6%9C%886%E6%97%A5%E5%AE%8C%E7%BB%93/td-p/7007033

    作者回复: 谢谢分享

    2019-03-06
    2
  • 潘政宇
    老师好,为什么ping命令使用PTR信息,ping一个域名的时候,直接dns查询得到A记录ip地址,然后ping这个ip就行啊,为什么使用反向解析?

    作者回复: 不只是ping,大部分输出中包含名字的工具都支持反向解析,这是为了更直观展示结果(毕竟我们熟悉的都是域名而不是IP)。

    2019-02-21
    2
  • Griffin
    Web的问题推荐 MITM啊

    作者回复: 嗯嗯,谢谢补充

    2019-03-24
    1
  • ninuxer
    打卡day40
    使用姿势跟老师的一样,都是tcpdump抓包后,拿到图形界面分析,如果是web问题,还会用下fiddler来分析

    作者回复: 嗯嗯,fiddler主要用于HTTP

    2019-02-22
    1
  • 我来也
    [D38打卡]
    以前都是在windows上用Wireshark,想不到linux下也有Wireshark.
    不过平常维护的linux只能用终端登录,在终端中还是用tcpdump.

    今天看了专栏,才发现,可以用tcpdump抓包,然后用Wireshark来展示.这个厉害了.

    作者回复: 嗯 复杂的场景还是用Wireshark更方便些

    2019-02-18
    1
  • kissingers
    老师,有没有碰到过tcpdump 抓包本身就丢包,即tcpdump 本身丢包了?
    2019-09-23
  • 哈哈哈哈哈哈哈哈
    老师 对线上服务进行tcpdump会影响性能吗
    2019-09-15
  • wking
    老师,有没有工具抓取指定某个url请求tcp包?
    2019-09-08
  • Boy-struggle
    老师,最近我们遇到了一个关于vsftp问题,客户端返回错误码为28,官方解释是数据连接超时,到不清楚到底是从客户端分析还是服务端分析,我们用的是被动模式vsftp

    作者回复: tcpdump抓包看看?可以先试试客户端抓包,如果还是没有线索就两端抓包对比看看

    2019-04-23
  • 大坏狐狸
    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
    (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
    (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
    (3) 服务器关闭客户端的连接,发送一个FIN给客户端。
    (4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。


    老师这个是百度百科的。请问第一个抓包的时候有FIN 没说有ACK ,但是上图中ACK=y+1; 而你的(Wireshark TCP 4-times close 示例 这句话的连接的图片,也是没有ACK的 。但是平常抓包确实会看到ACK。。。那老师 到底带不带ACK,第一次FIN的时候?)

    作者回复: 文中有讲到的,在四次挥手的图后面

    2019-04-10
  • 付坤
    工具很用法简单,最重要的是要了解TCP相关的基础知识,否则能抓到包,也看不出问题和原因来。
    感谢老师的分享,很受益,需要再巩固下基础知识。
    2019-04-03
  • 如果
    DAY38,打卡
    2019-04-02
  • Griffin
    老师问个问题,我man tcpdump搜索-nn没找到结果,只有-n的介绍。我搜索了下发现在linuxquestions.org上有人问,并且回答者也是用的man,结果有-n和-nn的介绍。是我的man版本不对么?系统版本是18.04.1

    作者回复: 应该是版本的问题,比如https://linux.die.net/man/8/tcpdump 这儿就有

    2019-03-24
收起评论
22
返回
顶部