系统程序优化实战(下)

本文接上篇“系统程序优化实战(上)

分析优化

基于发现的问题,但找到问题原因很难,此处罗列了发现过程(看似容易,实际痛苦):
1、测试网络带宽,并监控测试时网络带宽流量。
2、所有Redis缓存,改为本地二级缓存。流量降低很有限。改为固定信息,立马就下来80%。非常纳闷。
3、三个固定信息(Account,User,PermList),逐一从固定信息改为从缓存读,最后发觉是PemList引起,但郁闷的是PermList并没有从网络读啊。
4、再次分析程序,发掘PermList存到SpringSession了,最后查看redis缓存,发现SpringSession非常大(一个大约66k,去掉PermList,则只有6k多)。最后计算了并发量(66kByte*180=11MBps)确实大。SpringSecurity的Session相关信息保存到redis,保存数据很多。
5、最后改变程序逻辑:权限认证时从缓存中拿,不从SpringSession取,SpringSession中保存认证信息为一个固定值。测试结果(300个线程,跑15分钟,同一个用户)如下:
在这里插入图片描述
优化后,性能完全满足,且超出很多。但到此优化工作并未完成!

关联程序适应性改造

程序优化必须考虑相关功能适应性改造!!!
由于改用缓存机制,必然涉及到刷新。登陆涉及到的刷新程序如下:
1、修改密码
2、用户信息修改、停用
3、用户绑定或解除角色权限
4、角色授权
逐一对上述程序修改,并测试保证达到预期目的。

延展性优化

优化方案可能带来新问题,需要解决!!!
只要涉及缓存,必然涉及刷新。本功能优化涉及两级缓存:
1、本地缓存的时效问题。(redis设置过期时间,本地缓存可继续有效,因为变化引起会从本地缓存更新开始)
2、Redis缓存,一旦刷新即全局的。
3、在应用服务器中使用本地缓存(二级缓存),刷新时是局部的,在分布式环境下,一台服务器刷新另一台服务器并不知道。需要建立相关机制解决。(利用redis的消息机制)

优化后再次测试

所有优化完成(测试方案300次,每5秒启动300线程),测试效果如下:
TPS:400-450;平均响应时间均在1s内

附1:多用户并发测试

本次优化目标有3个,之前解决了2个。限于篇幅,第三个目标测试过程简单罗列如下:
生产10000个账户数据。
测试时随机取一个账户进行登陆测试。
用jmeter-GUI方式测试,第一次测就把系统搞崩溃了,注意如下提示:
在这里插入图片描述
改用CLI模式测试:
1、用CLI模式测试,测试次数最好是具体,不要无限循环,因为中断后不能出report报告。
2、可直接打开jmx文件,修改信息,如修改文件路径或文件名。
用循环随机取账户模式,“循环次数”不能为永远,否则不会自动结束,只有中断。
循环随机取账户模式运行结果吞吐量始终很少?
10次,每5秒启动100线程,循环每次100
10次,每5秒启动300线程,循环每次10,吞吐量:5.1
10次,每5秒启动300线程,循环每次10,吞吐量:3.8
用循环随机取账户模式运行结果吞吐量始终很少,解决方法如下:
失败方式:“随机数变量+循环控制器+Csv Data set Config+if控制器+http请求”组装后,吞吐量很少。
成功方式:bzm-Random CSV Data Set Config(需下载安装)+http请求 组装,吞吐量就正常。
10分钟内有10000个账户登陆。通常单台客户端机器是不能承受的。采用多台PC联合压力测试。

附2:其它分享

本次测试过程中发现其它可分享经验罗列如下:
1)现在系统每个租户都要建一个数据库链接,目前配置最大链接数300,意味着最多300个链接,需优化。设置为:16384
2)redis一般数据每次存取响应时间100-160us,通过1000M网络,大约300-400us。如果流量很大,网络容易存为瓶颈。
3)用Redis不同库测试结果差异大:
Reids用0库测试吞吐量达到400,CPU jumps 17.7k/25.94k,CPU utilization为68%。
Reids用2库测试吞吐量达到280,CPU jumps 22.89k/32.47k,CPU utilization为50%。
网络流量、磁盘、内存均差不多。很明显CPU切换频率2库远高于0库,导致吞吐量小。
该点不能理解
4)系统刚启动,第一次跑性能测试,通常不准,多跑几次观察。

本次系统程序优化实战分享完成,大家多多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值