java web线上项目导出数据慢且有时出现闪退现象原因分析及解决办法

1. 问题现象

最近线上项目有反馈说,导出数据(excel文件格式)时,经过一段时间(60秒左右)的等待后,出现了闪退现象,直接跳转到了登录页面。

2. 原因分析

经过综合分析,主要存在以下几个方面的原因:

  1. 阿里云负载均衡的超时时间设置太小(60秒),正常页面没有问题,时间长的任务就容易超时,超时后页面跳转登录页面;
  2. 数据库查询时间长,以及写入Excel时间长导致超时;
  3. 每条数据查询一次机构名称,导致数据库访问次数多,时间长;
  4. java进程的设置的最大内存设置为1GB;
  5. 负载均衡的超时时间为60秒,太短无法满足需求;

总的来说,就是随着数据量的不断增加,查询数据需要的时间变长(sql也需要做进一步的优化来提高查询效率),单次导出的数据量没有添加限制,可能一次导出30万到50万的数据,这使得数据库查询时间增加,excel文件生成的时间也增加。

3. 解决办法

解决方法从简单到复杂,提供3个方面的办法。

  1. 最直接的办法:修改负载的超时时间,将超时时间修改为180秒;该方法可以大幅减少闪退的问题,但仍然无法解决慢的问题;
  2. 数据库再优化,针对特定的查询条件组合提供联合索引;建立常用查询关键字段组合的联合索引,提高查询速度;
  3. 采用异步方式(如定时任务)生产导出Excel文件,生成后用户再进行下载;针对需要导出的数据量的大小做两种处理,如果导出数据量小,比如小于5万条,可以在页面直接导出,如果需要导出的数据量大于5万,则采用异步方式,由用户提交导出申请,然后通过定时任务执行异步导出,导出完成后,用户可以看到并下载生成好的文件。

经过上述3个方面的改进,数据导出速度慢和闪退问题得到彻底解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值