文档章节

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

ericquan8
 ericquan8
发布于 2017/07/23 23:57
字数 1079
阅读 58
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

异步化,高并发大杀器

今天来聊聊如何让项目异步化的一些事。 在进入正文之前,顺便给大家推荐一个Java架构方面的交流学习群:698581634,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分...

Java大蜗牛
6分钟前
0
0
织梦dedecms安全设置

网站本身做好防范: 1、修改默认后台名。 打开网站根目录,找到[dede],这个文件夹就是后台的路径,可以随意修改,比如修改为[adminbuy],此时后台登陆的路径为:http://www.*****.com/admi...

雨季2014
6分钟前
0
0
完美Python入门基础知识点总结,看完你的Python就完全入门了!

Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线...

糖宝lsh
12分钟前
0
0
Java关于前后台传输中文乱码以及Excel下载乱码解决

针对乱码,一般情况是前后台以及中间件编码格式不同导致.故需要保证编码格式相同即可. 1.前台页面格式指定,这里用的是jsp,故需要将pageEncoding指定为"UTF-8" 2.指定服务器编码格式,比如用的t...

勤奋的蚂蚁
15分钟前
0
0
Flutter组件 - Flexible

Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。 Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是...

一箭落旄头
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部