性能优化-记录一次性能调优(dubbo,mongo,oom)

1、涉及技术

该接口使用到了dubbo远程调用接口,从mongoDB获获取数据,后端拼接前端代码。

2、压测环境

提供两台服务,但是在同一台服务器上
mongoDB和mysql在另一台服务器上
mongoDB是单机
集合点并发压测1,200,300,500
页面有500人,每人13个字段。也就是表格大小,501行和13列。这些数据是从mysql和mongoDB中共同查出

3 优化过程

3.1 单次访问

问题:接口单次访问需要3秒。
接口单次访问3秒,对于这个级别的数据量的确是不合理的。因此,需要优化。
(1)首先全局检查代码,是否有烂代码和冗余代码,是否是查库没有用到索引。本次基本上没有优化
(2)程序中加锚点,在感觉会出现比较慢的地方打印出执行时间。本次定位到有处查询mongoDB中人员信息数据的,占用90%的时间。那么就着重优化mongoDB查询。
优化前:
在这里插入图片描述
经分析,可以看出此查询一次批量将500人的数据取出,而每个人的数据有比较多,有四五十个字段。
因此我先优化批量查询,看是否有办法能快速读出数据。经查询资料,可以使用DBCursor去读取数据,该方式是使用了游标逐个获取数据。
优化后:
在这里插入图片描述
使用游标读取数据,确实快了很多,接口数据从3秒一下降到了600ms。其中有两个地方查询了mongo。

3.2 并发优化

并发200平均时间 28秒,原来并发50就用了226秒。的确提升很大。然后继续往大的压,
并发300时,出现mongodb连接超时,经查看mongoDB配置,压测机上的maxWaitTime=1500,这么点的等待超时时间,以为mongo很牛逼吗。还有更狠的connectionsPerHost=8,最大连接数等于8,才给这么点,这是想多么省资源啊。将修改改,等待超时时间改成了12s,最大连接数改成了500。改好后继续压,妈的,dubbo连接数超过最大200,dubbo连接数如果不设置的话默认200,像我们需要并发500,两台服务,dubbo总共可以连接400,显然是不够的。 然后将压测机的dubbo连接数修改成400,两台总共800,应该是够了。
两个配置都改好后,继续压300,妈妈的,内存溢出╮(╯﹏╰)╭
内存溢出。为什么内存溢出呢,优先想到的是查询mongoDB的锅,还是在同一时间,大量的请求mongoDB数据堆积,导致内存溢出。使用JProfiler分析了一下内存溢出时生成的hprof文件。如下图所示,还真是mongodb占用了大量的内存(24%)。
在这里插入图片描述
知道什么原因了,那么就想办法减少mongoDB的查询列和返回列数据。而我们也是要动态展示列,一般情况下也就展示七八列,正好DBCursor可以提供支持。
再次优化后代码:
在这里插入图片描述
重新压300:成功100%执行完成,平均速度为18s。
压500:成功100%执行完成,平均速度为33s。
单次请求: 400-500ms

4、总结

优化步骤
(1)先总体查看是有烂代码冗余代码
(2)定位慢代码,分析原因着重优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值