压测、压力测试分析、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: 一段时间内,访问页面数量。

hiber uv & pv
东方娃娃 pv & uv

2.2 PV

三:通用性能的提升

通用性能优化口诀,三部曲
a:缓存、b:异步、c:批处理,基本上可以解决99%的性能问题,来源阿里大牛 。

3.1 性能提升三部曲

  1. 缓存
    如:openrestry(linux) lua 缓存 、redis缓存、Guava Cahche缓存, 多级缓存配合推到离用户最近的地方, 这种方式可以提高成千上万倍的性能提高。
    本地热点缓存:热点数据、脏度不明感、内存可控。 对脏读非常不敏感,本地缓存没有io开销,比redis少了io开销。存储到每个jvm内存中,可以完成上几千万、上亿的访问量。一般数据时间都不redis少的多。
    多级缓存:本地缓存(保存1分钟)》redis缓存(10分钟)》数据库
  2. 异步处理
    如:支付宝、微信 支付付款异步返回结果,支付链路可能非常复杂,有结果轮训或者主动推送。要对接银行体系、风控体系、商户体系等。
    还如:异步发送短信、异步发送邮件、异步抢单。
  3. 批处理
    如有成千上万,或者几十条的数据要插入、更新,批量操作销量会提高很多。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终值评价请求时间异常%
nginx10005301M80031618210.00
nginx10005303M13003167330.00
nginx10005305M220013003860.00
nginx100053010M370016981680.00
nginx100053030M360013882080.00
3.2.2 测试tomcat
#测试tomcat
#测试接口get:projectname/api/constants
测试对象线程数Ramp-up时间(秒)【多久启动这么多线程】循环次数带宽QPS峰值QPS终值评价请求时间异常%
tomcat10005301M301570000.00
tomcat10005303M1805463000.00
tomcat10005305M1508040000.00
tomcat100053010M45019029000.00
tomcat100053030M100060011640.00
3.2.3 全方案测试
单台tomcat两台tomcat加入redis加入guava cach加入nginx lua share内存缓存加入nginx lua redis缓存
270QPS1500QPS2000QPS3000QPS3500QPS3500QPS
1:并发上去不去,只有200-300服务器是,服务器打开的线程数上不去。需要下对tomcat调优 ; 2:调优之后打开线程数从40到400, 但是QPS还是没上去; 3:带宽升级到20M QPS上1000;4 :打开压测和后台的keepalive的选项,减少1台nginx、2台tomcat、1台mysqlredis有效期10分钟,减少数据库压力增加jvm内存缓存,缓存一分钟,直接内存读取,没有带宽开销比较redis缓存更快nginx cache 文件缓存 是基于文件的比较慢,我们不使用。我们使用 nginx(openrestry) + lua + share共享内存缓存,缓存1分钟。必须要修改请求路径,缺点无法更新缓存。nginx(openRestry)+lua+redis缓存,比共享缓存能慢点,但是可以方便更新缓存。距离用户更新,直接不过数据库

3.3 优化方案列举

参考 OpenResty最佳实践 ~ 缓存设计

优化次序优化对象优化方式方法结果负面影响花费时间
1tomcat打开线程数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
3tomcat keepalive开启配置tomcatkeepAliveTimeOut: 多少毫秒后不影响断开keepAlive、keepAliveTimeOut: 多少毫秒后不影响断开keepAlive、maxKeepAliveRequests: 多少次请求后断开失效、使用webServerFactoryCustomized定制化tomcat配置平均耗时明显降低花钱2day
4keepalive开启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缓存不存在取redisQPS能提升到接近3000QPS直接jvm内存取数据,效率比走redis网络和处理销量更高。脏数据无法清理1week
7openrestry(linux) lua + 共享内存 缓存nginx配置nginx lua 脚本开发和配置能有效减轻数据库服务器和应用服务器压力,缓存时间1分钟。缺点:无法更新缓存; 需要开发lua代码,每个请求单独开发。1w
8openrestry(linux) lua + redis 缓存nginx lua 脚本开发和配置。优势:可以更新缓存。缓存10分钟; 有点网络开销比 内存缓存慢一点nginx配置。能有效减轻数据库服务器和应用服务器压力1w
9服务器部署手工2台服务器做2台服务器做一个tomcat集群QPS进一步提升 3500QPS缓解单台服务器压力3days
10服务器部署手工4台服务器nginx一台、tomcat2台、数据库一台QPS进一步提升 4000QPS数据库压力、服务器压力完全分开,缺点增加服务器需要有人看守手工增加1w
11aliyun成套方案阿里云4台起步,数量无上限购买负载均衡器SLB(免费)、购买OSS(按量不贵)、购买CDN加速(按量)、购弹性伸缩(Auto Scaling)、购买2台应用服务ECS、一台基础服务ECS、一台高可用数据库RDS缺点花钱,优势ECS服务器可以无人看守自动高峰期可以自动扩充服务器,可以一键自动扩从无限多台服务器,理论上QPS可以到无上限。当然流量地方也可以自动降低配置减少成本花钱、改架构,ecs可以无限扩充、数据库可以使用高可用版本、图片使用OSS1w
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dazer007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值