网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

22 | 为什么压力测试TPS总是上不去?

客户端idle timeout小于服务端
idle timeout设置不一致
调整HTTP Keep-alive设置
TIME_WAIT状态过多
使用长连接
TCP源端口耗尽
服务集群水平扩展
更高性能主机
PPS(Packet Per Second)
网卡包量问题
修改 net.ipv4.tcp_max_tw_buckets
idle timeout设置
本地源端口范围
TIME_WAIT状态
载荷长度
序列号
快速TCP连接状态检查
TCP连接状态检查
网络包量检查
解决办法
原因分析
解决办法
原因分析
解决办法
原因分析
解决办法
原因分析
JMeter
LoadRunner
Apache ab
延迟
丢包
带宽上下行
TCP并发连接数
并发量
请求耗时
请求TPS
CPU使用率
TIME_WAIT时间调整方法
测试带宽工具
控制TIME_WAIT状态
RST原因
源端口耗尽
重传判断
ss
netstat
sar
案例4:connection reset by peer
案例3:cannot assign requested address
案例2:LoadRunner部分失败
案例1:TPS上不去
重量级
轻量级
网络的承受能力
LB的连接处理能力
应用的承受能力
思考题
实验
TCP知识
性能工具
性能问题排查
压力测试工具
压力测试目的
压力测试与性能问题

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

你好,我是胜辉。
在上一讲里,我们排查了一个跟操作系统紧密相关的性能问题。我们结合 top 和 strace 这两个工具,抓住了关键点,从而解决了问题。性能问题,确实也是我们日常技术工作中的一个重要话题。在出现性能问题以后,我们要有能力搞定它;而在出现性能问题之前,最好能提前预见到它。而要“预见”性能瓶颈,最好的方法就是做压力测试
但是,我们在做压力测试的过程中也时常出现预料不到的情况。比如在离预期的瓶颈值还很远的时候,系统就出现了各种意外,影响到压力测试的继续进行。
那么在这节课里,我们会回顾几个典型的压力测试场景中的网络问题,一起来学习其中的关键要点。同时,我们还会学习一系列跟网络性能相关的压测工具和检测工具,这样以后你遇到类似的问题时,就有所准备了。

压测要做什么?

压力测试的诉求实际上多种多样,不过大体上可以分为这几种。
应用的承受能力:这主要在第七层应用层,比如发起了压测,把服务端的 CPU 打到 95% 甚至 100%,观察这时候的请求的 TPS、请求耗时、并发量等等。而这些对于不同的业务场景,又会有不同的侧重点。比如:
对于时间敏感型业务来说,请求耗时(Latency)这个指标就是关键了。
对于经常做秒杀的电商来说,并发处理量 TPS(Transaction Per Second)就是一个核心关注点了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了压力测试中的网络问题及解决方法,重点介绍了与网络性能相关的压测工具和检测工具。文章首先强调了压力测试的多样性,包括应用的承受能力、负载均衡器的连接处理能力以及网络的承受能力。针对不同业务场景,压测的关注点也有所不同,比如时间敏感型业务关注请求耗时,而电商秒杀活动则关注并发处理量。此外,文章还提到了压测中需要关注的TCP并发连接数、上下行带宽能否跑满以及丢包和延迟等问题。通过具体案例和详细分析,为读者呈现了压力测试中的网络问题及解决方法,对于从事技术工作的读者具有一定的参考价值。 在案例4中,通过分析压测遇到的connection reset by peer问题,文章展示了对网络问题的排查和解决方法。通过案例分析,读者可以了解到TCP RST的原因及解决方法,以及如何调整客户端的idle timeout参数来避免连接失效导致的RST。此外,文章还提供了实验步骤,让读者能够通过实际操作来理解和验证所学知识。 总的来说,本文通过深入的案例分析和技术讨论,为读者呈现了压力测试中的网络问题及解决方法,对于从事技术工作的读者具有一定的参考价值。读者可以通过本文了解压测工具和检测工具的使用,以及排查和解决网络问题的方法,为他们在实际工作中应对类似问题提供了指导和参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络排查案例课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • JianXu
    当年蒋公领导Cms 项目,压测必须见到cpu , mem 或者IO 之一见顶,不然不算过。客户端压测必须有多机并发避免受限单机性能。需要做大小包测试,对应到cms 就是小的文档和大的文档压测。目标机也需要多机集群,因为牵涉到服务端同步。

    作者回复: 这些都很全面了:)

    2022-03-12
    5
  • 那时刻
    请问老师,文中提到:对于网络处理来说,主要的开销在包的头部的处理上,而载荷本身的处理是很快的。指的是内核需要处理头部信息所消耗的开销么?而载荷是由应用程序处理,不计入网络处理?

    作者回复: 因为对操作系统来说,处理报文的开销主要就是对头部的拆解和封装,而对载荷做的结构化处理就很少,对载荷的操作主要是内存复制。比如一个64字节的报文和一个640字节的报文,对CPU的开销差别不大,但是带宽上的差异就大了,所以大报文测试可能先触及带宽瓶颈;小报文测试,可能先触及CPU瓶颈。

    2022-03-11
    3
    5
  • holiday
    案例一的5万pck/s达到这台云主机的上限,这个老师能否详细解释一下?

    作者回复: 你好,这个数值是我们已知的瓶颈值,你们也可以用这种方式发起压测,然后用sar -n DEV查看包量。如果无论怎么压测,这个包量值就维持在某个数值(甚至有时候还会降低一些),那说明这个就是这台主机的瓶颈值了~

    2022-04-02
    6
    2
  • Realm
    1 iperf 和 netperf 都是最常用的网络性能测试工具; 2 也可以通过修改内核参数,优化tw的问题 #启用 timewait 快速回收。 net.ipv4.tcp_tw_recycle = 1 #开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接。 net.ipv4.tcp_tw_reuse = 1

    作者回复: 你的补充很好:) 不过,tw_recycle这个配置从4.12内核开始被移除了。关于这个变更,这里有详细的说明:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4396e46187ca5070219b81773c4e65088dac50cc

    2022-03-11
    2
    1
  • 陈海松
    请问老师,最近我们这边遇到一个问题,2个系统建立tCP连接总是在1500个左右,超不过1600.遇到业务高峰期,就会出现连运维中心维护终端SSH都连接不上或者需要多次尝试才能登录系统。系统允许打开文件数、文件句柄数调整了,没有效果。系统负荷、内存占用率都不高,网络带宽也足够,麻烦老师协助帮忙分析分项,盼复,谢谢!

    作者回复: 您好,你提到高峰期TCP连接数不超过1600,应该是指ESTABLISHED状态的连接数吗?还是指活跃的并发连接数(比如一些网络IO库提供的连接池设置)?你可以看看出问题时候是不是有大量的连接建立和销毁,这部分隐形的开销也可能引起问题。另外可以查看SYN queue是否有溢出的情况。单纯从文字来看比较难给出准确的意见,有必要的话也可以到学习群详细讨论~

    2022-05-14
  • 汤玉民
    包量的上限是算的还是测试得到的

    作者回复: 你好,测试到极限后,无论客户端再增加多少请求量,服务端的包量数值就再也上不去了,这个时候就是包量的极限值了。也就是测出来的~

    2022-03-30
  • 那时刻
    1.测试带宽,可以使用iPerf工具 2.Linux的TIME_WAIT貌似是hard code为60秒。而阿里云的机器可以通过 sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE] 来修改TIME_WAIT。 window下可以通过修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters] "TcpTimedWaitDelay"=dword:0000001E

    作者回复: 1.是的 2.确实,Linux的这个值要修改只能重新编译内核了,阿里云的机器提供了方便的sysctl接口来修改这个值~

    2022-03-11
  • Chao
    Idle timeout 导致连接被rest。 遇到一个相同案例, 浏览器做法是遇到这种情况 进行了重试。 虽然有http headers 里可以申明 keepalive 超时时间 。 但好像没有客户端实现其读取并主动断开。

    作者回复: 对,现代浏览器都有重试机制,可以对不少网络状况进行容错~ 关于你提到的服务端返回的Keep-Alive头部,我们可以看下MDN的解释: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive timeout: An integer that is the time in seconds that the host will allow an idle connection to remain open before it is closed. A connection is idle if no data is sent or received by a host. A host may keep an idle connection open for longer than timeout seconds, but the host should attempt to retain a connection for at least timeout seconds. max: An integer that is the maximum number of requests that can be sent on this connection before closing it. Unless 0, this value is ignored for non-pipelined connections as another request will be sent in the next response. An HTTP pipeline can use it to limit the pipelining. 也就是说,timeout值是连接保持的最短时间,但可以超过这个时间。 max是指开启了http pipeline以后才有意义,但大部分http场景是不启用Pipeline的,所以这个值一般就是被忽略了:)

    2022-03-11
    2
  • Liam
    带宽测试:iperf, pktgen 修改timewait的时间: 修改TCP_TIME_WAIT, 重新编译内核。默认2MSL是60s

    作者回复: 是的,修改TW时间需要重新编译内核。国内有云厂商提供了定制版的linux,可以用sysctl来动态修改这个参数,就方便很多了~

    2022-03-11
    3
  • 我想静静
    案列3中,我们的 LB 上的 VIP 有一个 idle timeout 的设置,如果客户端在一定时限内不发任何报文,那么这条连接将被回收。这个时限是 180 秒,而且回收时不向客户端发送 FIN 或者 RST 报文。 请问LB为什么不向客户端发送FIN呢?
    2023-10-15归属地:美国
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部