昨天有个朋友问题对mina是否有什么优化的资料,他这边一个系统压到500并发就上不去了,开始在看中国好声音,也没多想,直接说我这边没有。后来中间休息的时候,发现回答的有点问题,心里觉得其实应该告诉他压测的tips,找到瓶颈才能知道问题所在,昨晚初略的说了一下,今天把以前的一些经历回忆一下,贴出来,多少对一些新人有帮助。

这里主要还是说一下经验,具体的工具不太多的说了,以前写的一些blog多少有提到。首先判断压测需要开始查问题的情况是加并发用户,TPS不增长了,甚至开始下跌了,RT不动了,甚至开始上涨了。(这两者有时候是有关联变化的,有时候是没有关联的变化的)
然后开始分析问题,第一件要做的事情:判断自己用的压测方式和工具(lr,ab,自己写的多线程客户端)是否正确,有好几次都是找了一圈发现测试端出现了问题(这是很悲催的),这类问题如何定位?找恒定基准(空挂web容器,mock对象固化RT)。
第二件事情,用操作系统的资源监测命令(linux 命令翻出来看看),cpu利用率,load,memory使用情况(cache,swap,应用占用),上下文切换情况,io wait,网络数据量,数据包丢包情况,文件句柄配置等等。根据这些指标判断,在用户并发增加的时候,哪些指标变化的厉害,甚至已经明显成为瓶颈。如果你是java应用,那么多看看jvm的gc,线程dump出来看看是否有大量lock,或者有单线程吃掉固定的cpu等等。
第三件事情,开始定位到底什么引起了这些基础资源成为瓶颈。首先先要排除依赖系统的问题,所谓依赖系统,比如web容器,集中式缓存,db等等,这些系统通常你没有办法debug,最重要的是去看看他们的log,对于warning,error特别注意,例如nginx对于数据包上下行会有配置,到一定大小就开始借助磁盘来缓解内存压力,不留意压力就上不去了,同时io也会很多。接着开始拆解你应用的各个模块,mock的方法来保证无消耗接口依赖,这样再反复测试定位问题。大志定位到某一个模块有影响的时候,一定要注意,这只是嫌疑犯,如果你写过有指针的语言你就会理解,往往问题发生在非爆发点。同时要提醒一点的是,很多时候当你真实的判断出一个瓶颈点的时候,优化了它,也许性能更低,为啥,例如A和B两个模块,A是瓶颈tps为30,B的tps是35,此时你把A优化到了tps为50,但是对于B来说压力明显就增大了,此时B可能由于资源压力tps开始下降(就是前面提到的并发用户上升除了保持平线,还可能下降)。
可能说到这里很多人觉得这都是常识,也没啥实质内容,其实首先就是找问题,然后就是用你语言熟悉度和业务设计来破隙问题。最后说最常用的几个所谓的优化万精油:
1.减少关键业务路径的RT总和。很多时候纠结与所谓的代码级别省,不如业务直接优化一点来的天崩地裂。(基础系统除外)
2.瓶颈资源,例如第二步说的所有指标资源和依赖系统的资源(例如web容器的线程数等)等。对瓶颈资源做两种处理:a.高效使用。(例如db的批量处理,缓存的批量获取,磁盘的批量刷出)b.少用。对数据一致性要求不高的情况下可以做一些本地缓存等等。c.快速释放。写过事件驱动代码的同学应该深有体会,将业务处理切割细化以后,原本hold的资源也会被碎片化的使用。(其实我们学习计算机cpu演进的时候就能看到这通俗的道理),快速释放意味着同样资源可以服务更多请求者。d.交换资源。磁盘换内存,多核cpu处理能力换存储。有兴趣可以看看TOP已经用了两年多的流式计算框架里面的设计细节。
3.换依赖,包括web容器,集中式缓存,磁盘等等,换他们并不一定是他们不好,而是也许数据结构不支持导致需要多次操作(集中式缓存),多系统间有更好的私有交互协议(反向代理和web容器之间),本身被革命了(固态硬盘)。
先写到这里,多少应该有点帮助,或者你遇到类似问题会有点共鸣,如果你是做业务系统,那么这个万精油的顺序就是你最好的改进顺序。
还是那句话,优化这东西就四步:1.找。2.定位。3.分析。4.迭代平衡瓶颈。

压力测试和系统优化tips相关推荐

  1. 压力测试和系统优化的技巧

    昨天有个朋友问题对mina是否有什么优化的资料,他这边一个系统压到500并发就上不去了,开始在看中国好声音,也没多想,直接说我这边没有.后来中间休息的时候,发现回答的有点问题,心里觉得其实应该告诉他压 ...

  2. 大型网站压力测试及优化方案

    作者:邴越 来自:cnblogs.com/binyue 0 木桶理论应用在系统优化中 木桶理论又称短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板. 木桶原理应用在 ...

  3. 压力测试过负载均衡_性能测试的方法有哪些?

    压力测试: 压力测试的关键字就是"极端".通过对系统的极端加压,从而观察系统的所表现出来性能问题.再对此性能问题进行分析,从而达到系统优化的目的.所以压力测试就是一定要让系统出问题 ...

  4. 【转】使用Jmeter针对ActiveMQ JMS Point To Point压力测试

    准备工作 针对JMS类型的Sampler,需要额外的jar包(这里用的是apache ActiveMQ,将下载的AMQ apache-activemq-5.5.0根目录下的activemq-all-5 ...

  5. 史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会

    性能测试 为什么要进行性能测试? 满足真实场景的业务需求 招聘需要 性能测试概念: 性能:软件质量属性中的"效率"特性 性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标 ...

  6. kafka性能参数和压力测试

    上一篇文章介绍了Kafka在设计上是如何来保证高时效.大吞吐量的,主要的内容集中在底层原理和架构上,属于理论知识范畴.这次我们站在应用和运维的角度,聊一聊集群到位后要怎么才能最好的配置参数和进行测试性 ...

  7. 如何压力测试电子商务网站

    如何压力测试电子商务网站 第1页:背景与面临的挑战! 如今,与百姓日常生活密切的电子商城.网络订票和网上银行等系统都是电子商务网站的典型案例.这些系统涵盖了产品宣传展示.商品选购.交易结算.服务与客户 ...

  8. 压力测试中存在的问题

    压力测试中存在的问题 (What) 什么是压力测试 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分.软件压力测试的基本思路很简单: 不是在常规条件下运行手动或自动测试,而是在计 ...

  9. 网站压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...

最新文章

  1. php基础 简书,php基础
  2. linux系统proc目录进程信息详解
  3. mvc ajax教程,MVC3----AJAX辅助方法
  4. bzoj 3195 奇怪的道路
  5. echart 设置y轴间隔_ECharts 柱状图之间的间距怎么调整的?y轴的线怎么调出来? 做成表格状。...
  6. 【Objective-C】Http常用API、同步请求与异步请求[转]
  7. 解决datafountain比赛提交.csv文件报错问题
  8. html5%3cimg%3e属性,汽车之家存储型xss可大规模获取任何用户cookie
  9. Navicat连接Oracle数据库
  10. 5V 升压 8.4V供电5V 转转 8.4V 做两节锂电池充电芯片FS2114
  11. 【Axure原型分享】评论元件
  12. pandas中DataFrame如何检测重复值
  13. xxl-job快速入门
  14. php主页备案号底部中间,icp备案号怎么放在网站底部
  15. Java虚拟机部分知识点
  16. 不要让自己的大脑变成别人思想的跑马场-叔本华
  17. Delphi6/7/2007获取类型信息
  18. Nest接收AVue上传图片文件
  19. 夜雨数竞笔记-定积分(1)-区间再现公式
  20. 第一类斯特林数和第二类斯特林数

热门文章

  1. 【学术前沿分析】1 论文数据统计
  2. 中国医药电子商务平台行业十四五盈利规模与运营前景分析报告2022年
  3. PHPExcel中文开发手册翻译版(2)
  4. 【理论篇】IC间通信的时序模型——系统同步、源同步和自同步
  5. Coinversation Protocol (铸币协议)简版白皮书及网站
  6. pmp考前冲刺 项目管理中的工具与技术
  7. Android架构分析之硬件抽象层(HAL)
  8. e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
  9. 微信小程序 | canvas为你的天气预报添加雨雪效果
  10. JavaEE——作业管理系统期末总结