背景
一天,另一个项目的老大枫哥急匆匆地来找我说:“小米,运营那边说系统导入订单的时候无法导入,我看了下是JVM内存满了,后来跟他们仔细聊了下,发现是同时几个人一起导入的,内存我配置了2G,几个大excel导入内存就满了,欢哥让我先出个临时方案解决下,后期再对整个功能优化下,我没什么思路,你有没有啥想法?”。
分析
总共JVM的内存2个G,导入一次excel订单要用到500M,4个人同时导入内存就满了,我心里有了几个方案。
方案一:内存调大
最简单的方式,房子不够大,就换一个更大的房子。
2G不够就把内存翻一倍,这样总够了吧,在启动命令上把内存调大即可。
方案二:引入排队机制
这个方案需要修改代码,耗时间,就像黄山各大景区到了五一、十一黄金周的时候客流量比平时暴增,就会限制景区内的客流量。
在执行方法前引入消息队列等机制,来限制执行的数量,这样内存总是够用的。
方案三:加一台机器
简单粗暴,成本相对大,一个房间不够,我就再加一个房间,这样总够了吧。
再搭建一台服务器,进行负载均衡,把任务分配到每一台服务器处理,这样就可以分担压力了;或者单独分配一台服务器,通过路由转发,这台服务器专门用来处理导入,其他的请求在原来的服务器处理。
方案四:新增接口
耗时长,既然原来的导入接口无法满足,那我专门开辟一个定制化的接口来支持大数量的导入。
写在最后
好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。
