文档章节

记一次性能压测的问题排查过程

ericquan8
 ericquan8
发布于 2017/07/23 23:57
字数 1079
阅读 85
收藏 1

最近一直在搞性能压测,断断续续的搞了一个月了,中间遇到各种问题,这里将这些问题分享下,以后大家踩坑时可以参考~

俗话说,工欲善其事,必先利其器。拿到机器,先检查CPU、内存、网卡、磁盘四大件。咋知道这第一关就踩雷了,dstat -tamps一下,看见网卡的出口流量总是为0:

出口流量为0,怀疑是读数有问题,如果只能进不能出,那根本无法远程到这台机器上。wget证实一下

下载文件成功,证明只是网卡出口数据包显示有问题,而网卡一直正常发送数据包。最后找运维的兄弟看看,说是网卡驱动问题,立即升级驱动重启机器解决问题。效率高得不得不给个赞!!

环境OK了,开始干活。把jmeter跑起来,使劲的调整着压测线程数,同时看着业务机的状态,实际发现无论怎么调整jmeter的压测线程数,应用的tps也无法上去,而且应用机器的水位都属于正常范围,没有任何压力;再检查ulimit,正常;再看看业务日志,有少量的业务错误日志(下游依赖的数据mock返回失败造成),属于正常范围。接着开始怀疑是tomcat的工作线程数太小,打开server.xml,逐次加大maxConnections、maxThreads的值,峰值tps也没有任何提升;同时检查此时应用的jstack+gc,没有发现异常。开始陷入困境:TPS上不去,机器压力低,业务处理也算正常范围,开始怀疑不是tomcat的问题了。既然机器压力不高,怀疑请求是不是没到机器?先用netstat检查了业务端口的连接数

发现ESTABLISH状态的连接才是100。而且连续打了几遍,都在100附近徘徊。发现问题了,我启动jmeter的启动脚本明明是设置了线程数为200的;按理说在应用机器压力不大的情况下,连接数起码也接近200吧。去问提供压测脚本的兄弟,然后豁然开朗了,调整压测线程数的方式没生效,压测代码不支持从启动脚本中配置压测线程数,得改配置文件才生效~~o(>_<)o ~~

好,恢复心情,以正确的姿势调整好压测线程数继续测。线程数一直往上涨,当加到400时,新问题又出现。tps突然降低至0,半分钟后又恢复正常,后面就一直0、正常、0、正常的间隔着。但跌0的时候,应用机器的水位数据跟没压测时是一样的。首先怀疑业务线程卡住了,jstack一把看,正常。翻看业务日志,都是mock返回的数据跟预期的不一样导致的错误,认为正常了;再看依赖库osp错误日志,看到有超时9000ms的日志;找负责mock的兄弟一起排查,他怀疑是osp-client跟proxy设置的线程数不够,建议调整osp-client跟proxy的线程数看看。当时就立马调大看了也没效果。其实现在仔细想想,是跟这个没关系的,就算osp-client的线程数不够,那起码也是部分请求因为等待工作线程响应慢而已,不应该TPS全掉0的;从错误日志看很大几率是mock端返回数据超时导致了。为了再证实这个事实,满足下好奇心,祭出大杀器。tcpdump一把,等到TPS掉0时结束,将数据拉回本地用Wireshark看

明显看到这两个数据包之间,时间间隔了24秒,能解析通了。再确认下是不是mock机器没返回数据包,加个筛选条件tcp.stream eq 75(有问题的数据流):

144是mock的机器,79是业务机。发现144->79的数据包,全部都是ACK类型的,只是向79发送ACK包,而没有返回任何的业务数据,这下水落石出了,剩下的辛苦mock的兄弟了。

© 著作权归作者所有

共有 人打赏支持
ericquan8
粉丝 6
博文 17
码字总数 21301
作品 0
广州
程序员
私信 提问
记5.28大促压测的性能优化—线程池相关问题

目录: 1.环境介绍 2.症状 3.诊断 4.结论 5.解决 6.对比java实现 废话就不多说了,本文分享下博主在5.28大促压测期间解决的一个性能问题,觉得这个还是比较有意思的,值得总结拿出来分享下。...

王清培
2017/06/04
0
0
性能压测诡异的Requests/second 响应刺尖问题

最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码、debug、fixbug都逐渐收尾,进入上线前的性能压测。 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数...

王清培
2017/09/23
0
0
性能压测诡异的Requests/second 响应刺尖问题

最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码、debug、fixbug都逐渐收尾,进入上线前的性能压测。 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数...

王清培
2017/09/23
0
0
保障了罗振宇跨年演讲的PTS铂金版正式上线,产品体验全新升级

摘要: 虽然2018年的跨年已经过去,但是对于今年各种新颖的跨年形式,不少人仍然意犹未尽。比如,罗振宇在深圳卫视和优酷直播的跨年演讲《时间的朋友》。据悉,当天现场参与人数近万,观看直...

阿里云云栖社区
01/19
0
0
Java性能调优

事情发生在16年了。当时系统beta版本进行上线前的性能压测时,发现进程的内存占用率会持续升高,与之而来的时,性能的接口性能的持续下降。最奇怪的是,停止压测后CPU和内存开销并没有恢复过...

稳稳的
2017/11/12
451
2

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部