性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

29丨案例:如何应对因网络参数导致的TPS呈锯齿状?

为什么说timewait的TCP链接只是问题的现象?
为什么最后想到了看防火墙?
性能问题解决案例的效果
性能问题解决案例的解决方案
性能问题解决案例的分析
性能问题解决思路的应用
性能问题解决思路要放开眼光
眼光要放开阔
遇到性能问题时不要慌张
性能问题不一定与代码有关
提供完整的解决方案
找到根本原因
善于学习和查找资料
建立分析问题的思路逻辑
性能问题总是层出不穷
思考题
性能问题解决案例
性能问题解决思路
性能问题总结
性能问题解决案例

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

在苍茫的性能分析道路上,不管你是一只多老的鸟,在经历了多个性能测试的项目之后,你都会发现对于性能问题而言,你仍然不敢说能全部解决。因为下一个问题可能真的是你完全没有见过的。
再加上技术的飞速发展,想跟得上技术的进步都是一件痛苦的事情,更别说要完全掌握并且融会贯通了。
我经常看到有些人在简历中动辄说自己做过上百个性能项目,以彰显自己有充足的经验。事实上,如果一个性能项目需要做两个星期的话,基本上做不到调优的层面,最多是弄个脚本压个报告。在我的经验中,基本上一个完整的架构级的性能项目从准备开始到写出测试报告、调优报告,需要 1.5 个月以上。你可以想像,这样的项目,就算一年不停地做,做 10 个都算是非常快的了,而要做上百个这样的项目,至少需要 10 年的时间。
并且不是每一个项目都能让你有分析性能瓶颈的机会,因为有很多问题都是重复的。
所以性能分析是一个需要不断总结出自己的分析逻辑的工作,有了这些分析逻辑,才能在新项目中无往不利。请注意我的描述,我强调的是要有自己分析的逻辑,而不是经历多少个性能问题。因为问题可能会遇到新的,但是分析逻辑却是可以复用的。
在今天的文章中,我仍然用一个之前项目中出现过的案例给你讲一讲性能分析的思路。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文以一个实际案例为例,介绍了如何应对因网络参数导致的TPS呈锯齿状的性能问题。作者通过详细描述了案例问题描述、分析过程和尝试优化的步骤,展现了解决性能问题的思路和方法。在分析过程中,作者通过观察压力工具给出的重要曲线,发现TPS在上升到一个量级时会掉下来,而响应时间也出现明显抖动。经过一系列的工作,包括查看操作系统资源、数据库、Tomcat、Nginx监控数据等,最终发现网络中存在大量的timewait,进而尝试了修改TCP参数、Nginx配置以及更换Nginx和服务器等优化方法。最终,作者发现问题出现在操作系统层面的防火墙,通过停掉防火墙解决了问题。整个案例展现了解决性能问题需要细致的分析和不断尝试的过程,为读者提供了宝贵的经验和思路。

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

全部留言(15)

  • 最新
  • 精选
  • 蔡森冉
    感觉学到了什么,又感觉好像都不懂,看完估计前面的也忘了差不多了。这真是要不断时间和经验的积累,总结方法。但是一点记住的就是全局--定向

    作者回复: 记住了重点。

    2020-03-26
    9
  • 每天晒白牙
    读完老师的文章,有下面几点疑惑 1. TCP 四次挥手中,主动断开链接的一方才会处于 TIME_WAIT 状态呢,老师在文中有说 客户端主动断开,服务端也会出现 TIME_WAIT 状态,这是什么情况呢? 2. nf_conntrack 模块对 TCP 链接进行追踪,然后 nf_conntrack 的表有限制,表满了就丢包,这个因导致了服务器出现大量的 TIME_WAIT 状态,但为什么反应到 TPS 是锯齿状呢?一会儿好,一会儿坏,就算是 nf_conntrack 表会释放,难道还会瞬时释放很多,这样 TPS 就上去了,然后又满了,TPS 又下降? 思考题 1.如何在分析一通后,最后定位到防火墙? 因为老师在经过对操作系统的 CPU、I\O、内存等资源还有数据库、Tomcat、Nginx 等监控数据没有发现什么问题,最后定位到网络连接状态有问题,即出现了大量的 timewait 状态的链接,然后老师想通过修改 TCP 相关的参数来达到复用处于 timewait 状态的链接(这些参数的本质是释放服务端的句柄和内存资源,但不能释放端口,而 源IP+源端口+目的IP+目的端口+协议号才是 TCP 五元组),修改完后没有解决问题 然后老师分析客户端主动断开时,服务端也会处于 timewait 状态(这块是我疑惑的,应该是主动断开链接的一方才会处于 timewait 状态),然后打开了 Nginx 的 proxy_ignore_client_abort 配置,即让 Nginx 忽略掉客户端主动断开时报的错,但问题还是没有解决,然后把 Nginx 和 Nginx 所在服务器也换了,问题没有解决。 开始考虑操作系统层面,网络收发数据那儿可以通过查看发送端和接收端的 Recv_Q 和 Send_Q 这四个队列是否有值,来判断瓶颈点,然后没有发现问题。 在最后才考虑防火墙了 2.为什么 timewait 的 TCP 链接只是问题的现象? 因为能引起链接处于 timewait 状态的原因还是有很多的,这就需要不断透过现象看本质,根据不断地排查锁定最根本的原因

    作者回复: 问题1,由于客户端异常断开,未发送fin包。服务端并不知道。当服务端探测到客户不在时,只能自己主动断开,故而有timewait出现。 问题2,nf_conntrack表满了会被清理,而tcp会重连,这时响应时间会增加,所以tps掉下后会再上升。

    2020-03-22
    9
  • Geek_6a9aeb
     既然跟加入的nginx没有关系,那么第一次性能测的时候为啥没有发现有这种性能问题呢?

    作者回复: 跟多加了一个操作系统有关系。

    2021-01-14
    4
  • Geek6198
    现象: * 测试环境压测曲线正常,线上环境曲线杂乱 * “TPS 在上升到一个量级的时候就会掉下来,然后再上到同样的量级再掉下来,非常规律” * “响应时间,在第一次 TPS 掉下来之后,就变得乱七八糟了。响应时间不仅上升了,而且抖动也很明显” 检查过程: 1. 问题检查 * 看操作系统CPU/io/memory/net * 看数据库、tomcat/nginx 2. 第1阶段结论: 网络连接有问题 * 发现了大量timewait 3. 尝试优化 * timewait是发起断开后的一个状态,修改服务端TCP相关配置 1. timewait资源允许重用+快速回收 等 * 修改nginx,只做转发,去除其它逻辑 * 将nginx部署到另一台服务器上 * 上述都没发现问题===》防火墙还没看 * 关闭防火墙,服务TPS正常 4. 第2阶段结论:瓶颈在防火墙 5. 问题分析 * dmesg 查下系统日志 * 发现 nf_conntrack 数据满了 * 查文档,知道其是干什么的;怎么改 * 修改配置,重新打开防火墙==》服务正常 6. 结束:瓶颈处理完成

    作者回复: 总结的不错。

    2021-11-30
    3
  • Geek_6a9aeb
    老师,linux tcp连接的限制(最大不能超过65535) ,对吗? 既然nf-conntrack默认也是65535 对最大tcp连接对应的? 这边没有看到 系统究竟建立了多少tcp连接,如果是超过65535个,那么丢包是合理的吧?

    作者回复: tcp连接可以超过65535,只要配置文件句柄即可。 nf-conntrack是另一个东西,逻辑上不是一回事。它和tcp连接不是同一个控制参数。

    2021-01-17
    2
  • 凌空飞起的剪刀腿
    想起了自己以前处理iptables限制tcp syn次数的性能调优,

    作者回复: 每次调优都应该记录下来。

    2020-04-04
    2
  • tt
    说TIME_WAIT是现象,是因为它只是“果”,导致它的“因”有很多可能,就是本课里老师采取的多种尝试。 当然,从分析链路的角度来说,它是TPS不稳的一个中间“因”,但还不能作为全局——定向分析的最终定位,所以是“现象。”

    作者回复: 理解的非常对。

    2020-02-26
    2
  • 分析思路很重要,还有分析问题的时候不要着急

    作者回复: 你已经掌握了最关键的精髓。

    2021-01-24
    1
  • 浩祥
    如果用1.5个月做性能测试,那就不要做了,1.5个月一个全新的产品可以上线了,预期线下费时,从投入产出比看,不如灰度放量,让实际场景暴露问题

    作者回复: 看是什么公司的什么产品。有些系统是不敢直接在上线暴露问题的,比如说银行。 出了一笔金额错误,那就得找很多地方。

    2020-10-20
    2
    1
  • zwm
    看不大明白只感觉nb,要学习的太多了

    作者回复: 性能分析本来就是工程级的难度。

    2020-03-06
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部