压测、压力测试分析、UV、PV、通用性能提高、并发
一:压力测试报错
1.1 java.net.SocketException: Socket closed
参考:JMeter压测“java.net.SocketException: Socket closed”解决方法
要使用http1.1
,在Connector里面加上 keepAliveTimeout
=“150000” maxKeepAliveRequests
="-1"
其中:
keepAliveTimeout
:表示在下次请求过来之前,tomcat保持该连接多久。这就是说假如客户端不断有请求过来,且为超过过期时间,则该连接将一直保持。
maxKeepAliveRequests
:表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close
头给客户端)。
1.2 java.net.SocketException: Socket Refused
分析原因:tomcat最大连接数maxConnections
(我们设置1万) + acceptCount
(等待队列数,我们设置2000), 超过就 报错connection refused
1.3 nginx "429 Too Many Requests”的原因与解决方法
428: nginx的话,就是限流了,限制每秒访问数。
429: nginx的话,限制单个ip打开的连接数。
二:性能指标
2.1 UV
UV:一段时间内,独立访问ip。
PV: 一段时间内,访问页面数量。
2.2 PV
三:通用性能的提升
通用性能优化口诀,三部曲
a:缓存、b:异步、c:批处理,基本上可以解决99%的性能问题,来源阿里大牛 。
3.1 性能提升三部曲
- 缓存
如:openrestry(linux) lua 缓存 、redis缓存、Guava Cahche缓存, 多级缓存配合推到离用户最近的地方, 这种方式可以提高成千上万倍的性能提高。
本地热点缓存:热点数据、脏度不明感、内存可控。 对脏读非常不敏感,本地缓存没有io开销,比redis少了io开销。存储到每个jvm内存中,可以完成上几千万、上亿的访问量。一般数据时间都不redis少的多。
多级缓存:本地缓存(保存1分钟)》redis缓存(10分钟)》数据库 - 异步处理
如:支付宝、微信 支付付款异步返回结果,支付链路可能非常复杂,有结果轮训或者主动推送。要对接银行体系、风控体系、商户体系等。
还如:异步发送短信、异步发送邮件、异步抢单。 - 批处理
如有成千上万,或者几十条的数据要插入、更新,批量操作销量会提高很多。for循环的insert/update 20条 和 一次行insert 20条的销量就能看出来了。
3.2 QPS(每秒查询性能)、TPS(每秒写性能)
3.2.1 测试nginx
#测试nginx
#测试接口get:nginx/get_json.json
location ~ ^/get_json {default_type application/json;return 200 '{"status":"success","result":"nginx json"}';
}
测试对象 | 线程数 | Ramp-up时间(秒)【多久启动这么多线程】 | 循环次数 | 带宽 | QPS峰值 | QPS终值 | 评价请求时间 | 异常% |
---|---|---|---|---|---|---|---|---|
nginx | 1000 | 5 | 30 | 1M | 800 | 316 | 1821 | 0.00 |
nginx | 1000 | 5 | 30 | 3M | 1300 | 316 | 733 | 0.00 |
nginx | 1000 | 5 | 30 | 5M | 2200 | 1300 | 386 | 0.00 |
nginx | 1000 | 5 | 30 | 10M | 3700 | 1698 | 168 | 0.00 |
nginx | 1000 | 5 | 30 | 30M | 3600 | 1388 | 208 | 0.00 |
3.2.2 测试tomcat
#测试tomcat
#测试接口get:projectname/api/constants
测试对象 | 线程数 | Ramp-up时间(秒)【多久启动这么多线程】 | 循环次数 | 带宽 | QPS峰值 | QPS终值 | 评价请求时间 | 异常% |
---|---|---|---|---|---|---|---|---|
tomcat | 1000 | 5 | 30 | 1M | 30 | 15 | 7000 | 0.00 |
tomcat | 1000 | 5 | 30 | 3M | 180 | 54 | 6300 | 0.00 |
tomcat | 1000 | 5 | 30 | 5M | 150 | 80 | 4000 | 0.00 |
tomcat | 1000 | 5 | 30 | 10M | 450 | 190 | 2900 | 0.00 |
tomcat | 1000 | 5 | 30 | 30M | 1000 | 600 | 1164 | 0.00 |
3.2.3 全方案测试
单台tomcat | 两台tomcat | 加入redis | 加入guava cach | 加入nginx lua share内存缓存 | 加入nginx lua redis缓存 |
---|---|---|---|---|---|
270QPS | 1500QPS | 2000QPS | 3000QPS | 3500QPS | 3500QPS |
1:并发上去不去,只有200-300服务器是,服务器打开的线程数上不去。需要下对tomcat调优 ; 2:调优之后打开线程数从40到400, 但是QPS还是没上去; 3:带宽升级到20M QPS上1000;4 :打开压测和后台的keepalive的选项,减少 | 1台nginx、2台tomcat、1台mysql | redis有效期10分钟,减少数据库压力 | 增加jvm内存缓存,缓存一分钟,直接内存读取,没有带宽开销比较redis缓存更快 | nginx cache 文件缓存 是基于文件的比较慢,我们不使用。我们使用 nginx(openrestry) + lua + share共享内存缓存,缓存1分钟。必须要修改请求路径,缺点无法更新缓存。 | nginx(openRestry)+lua+redis缓存,比共享缓存能慢点,但是可以方便更新缓存。距离用户更新,直接不过数据库 |
3.3 优化方案列举
参考 OpenResty最佳实践 ~ 缓存设计
优化次序 | 优化对象 | 优化方式 | 方法 | 结果 | 负面影响 | 花费时间 |
---|---|---|---|---|---|---|
1 | tomcat打开线程数 | 1:并发上去不去,只有200-300服务器是,服务器打开的线程数上不去。需要下对tomcat调优 ; | 最大连接数 max-connections:10000 ;4C8G最大线程数:max-threads=800 、8C16G=2000、16C32G=4000;等待线程数:min-spare-threads=100 | 调优之后打开线程数从40到400, 但是QPS还是没上去; | -不同配置服务器要配不同调优参数- | 1day |
2 | 带宽增大 | 带宽5M==>20M | 花钱购买 | 调优之后QPS上升到1000 | -不同配置服务器要配不同调优参数- | 1day |
3 | tomcat keepalive开启 | 配置tomcat | keepAliveTimeOut: 多少毫秒后不影响断开keepAlive、keepAliveTimeOut: 多少毫秒后不影响断开keepAlive、maxKeepAliveRequests: 多少次请求后断开失效、使用webServerFactoryCustomized定制化tomcat配置 | 平均耗时明显降低 | 花钱 | 2day |
4 | keepalive开启 | nginx调整 | nginx http从1.0 升级到1.1 打开keepalive ,减少不断的开启关闭连接的消耗; proxy_http_version 1.1; proxy_set_header Connection “”; | 平均耗时进一步降低 | 花时间调优 | 0.5day |
5 | 缓存服务器 | 代码开发 | 能放到缓存服务的全放到redis里面,减少直接操作数据库,一般设置10分钟有效期器 | QPS能翻倍,到2000 | 需要开发,根据缓存范围不同开发成本有变化;极大的减少了直接操作数据库,性能会极大提高;时间成本是问题;有脏数据库需要得到pm认可。 | 2week |
6 | 热点数据缓存Guava Cache | 代码开发 | 热点数据jvm缓存,热点数据缓存到jvm内存,缓存时间一分钟;jvm缓存不存在取redis | QPS能提升到接近3000QPS | 直接jvm内存取数据,效率比走redis网络和处理销量更高。脏数据无法清理 | 1week |
7 | openrestry(linux) lua + 共享内存 缓存 | nginx配置 | nginx lua 脚本开发和配置 | 能有效减轻数据库服务器和应用服务器压力,缓存时间1分钟。缺点:无法更新缓存; 需要开发lua代码,每个请求单独开发。 | 1w | |
8 | openrestry(linux) lua + redis 缓存 | nginx lua 脚本开发和配置 | 。优势:可以更新缓存。缓存10分钟; 有点网络开销比 内存缓存慢一点 | nginx配置。能有效减轻数据库服务器和应用服务器压力 | 1w | |
9 | 服务器部署手工 | 2台服务器 | 做2台服务器做一个tomcat集群 | QPS进一步提升 3500QPS | 缓解单台服务器压力 | 3days |
10 | 服务器部署手工 | 4台服务器 | nginx一台、tomcat2台、数据库一台 | QPS进一步提升 4000QPS | 数据库压力、服务器压力完全分开,缺点增加服务器需要有人看守手工增加 | 1w |
11 | aliyun成套方案 | 阿里云4台起步,数量无上限 | 购买负载均衡器SLB(免费)、购买OSS(按量不贵)、购买CDN加速(按量)、购弹性伸缩(Auto Scaling)、购买2台应用服务ECS、一台基础服务ECS、一台高可用数据库RDS | 缺点花钱,优势ECS服务器可以无人看守自动高峰期可以自动扩充服务器,可以一键自动扩从无限多台服务器,理论上QPS可以到无上限。当然流量地方也可以自动降低配置减少成本 | 花钱、改架构,ecs可以无限扩充、数据库可以使用高可用版本、图片使用OSS | 1w |
压测、压力测试分析、UV、PV、通用性能提高、并发相关推荐
- 压测接口线程数设置_ZAT掌门性能压测巡检系统实战和落地
项目背景 随着业务拓展,对于接口性能的要求也在上升,各部门也开始针对部分慢接口进行优化,从测试角度针对这些优化需求进行测试时不仅要保证对应接口的功能正常使用同时也要验证接口优化成果.在日常的开发工作中 ...
- linux下webservice压力测试,pylot压力测试支持linux及windowsWebService性能及扩展性的工具.docx...
pylot压力测试支持linux及windowsWebService性能及扩展性的工具 下载以下软件请加群292501151,群共享有如有不便敬请谅解,执行#后面跟着(linux命令行)!普:Pylo ...
- 初入职常见问题:弱网络环境构造、压力测试、内存泄漏、性能持续优化工具
文章参考自: 作者:helloworlds 链接:https://zhuanlan.zhihu.com/p/21348220 来源:知乎 弱网络环境的构造 traffic control traffi ...
- Asp.net 性能监控之压测接口“卡住” 分析
问题描述:web api项目接口压测.前期并发100,500没出现问题,平均耗时也在几百毫秒.当并发1000时候,停留等待许久,看现象是jemeter卡住,没返回,时间过了许久,才正常. 解决过程: ...
- Java怎么测并发量_如何测试一个web网站的性能(并发数)?
最近做了个web网站(javaweb),现在想测试一下这个网站能承受的最大并发数,但是对于压力测试知之甚少,求指教啊,我有两个问题: 1.我最想测试的是最大并发量,怎么测试呢? 2.一般web网站性能 ...
- Android monkey压测后如何分析log
记录下monkey测试后如何分析log 1.拉取log adb pull data/local/tmp/ ./ adb pull data/system/dropbox/ ./ adb pull ...
- ACCP7.0-S2-复习自测-15测试分析
3.下列关于java中集合接口的说法不正确的是(). A: B: C: D: 正确答案是 D 4. (选择一项) A: B: C: D: 正确答案是 D 5. (选择一项) A: B: C: D: ...
- 压测学习总结(7)——Jmeter性能测试之脚本增强
参数化 在Jmeter中,实现参数化的方式很多. 本质上来说,参数化的实现方式有两种: 文件方式:一般建议通过配置元件--CSV 数据文件设置组件来实现. CSV 数据文件设置组件 函数方式:一般通过 ...
- 压测瓶颈在mysql_MySQL的性能基线收集及压力测试
建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...
最新文章
- 图像处理:图像复原与重建之逆滤波、维纳滤波、约束最小二乘滤波——Matlab实现
- 永洪科技助力RayDataUnity强强联合,打造数字时代“新引擎
- 那些年,我们追过的java8
- JavaScript能力测评经典题及答案(一:数组之查找组元素位置)
- 为TFS配置跨平台的生成服务器Xplat (Ubuntu Linux)
- SpringBoot中如何灵活的实现接口数据的加解密功能?
- css border画图
- zookeeper之理论基础
- 学习ES6路线了解图
- wpf分页预览html文件,用WPF实现打印及打印预览
- 关闭戴尔增霸卡!!!
- 使用nginx时候html页面乱码解决办法
- php 代码分析软件,分析和解析PHP代码的7大工具
- 网络工程师还吃香吗?
- 毕业生做了这个考研论坛系统,使用的是SSM框架和JSP技术
- 中国传媒发展十大趋势
- 拓维信息鸿蒙服务器,润和软件、常山北明、诚迈科技、拓维信息,谁是华为鸿蒙真龙头?...
- 《Arduino直流电机控制教程》
- OpenPDF使用教程及样例代码
- 齐鲁师范学院计算机专业在那个校区,齐鲁师范学院有几个校区及校区地址
热门文章
- C#实现图形的平移和缩放
- Refactor反编译C#程序
- 【Python3】文本分类综合(rnn,cnn,word2vec,TfidfVectorizer),中文纠错代码解析(pycorrector)
- 【Android源码面试宝典】MMKV从使用到原理分析(一)
- Latex 自用中文模板
- 布袋除尘器过滤风速多少_布袋除尘器过滤风速的确定标准是什么?
- 布袋除尘器过滤风速多少_布袋除尘器选用多少的过滤风速比较合适
- background:rgba()
- AUTOCAD——图层线型
- 解决关于java的IO流进行文件拷贝时拒绝访问的问题