背景
当mysql数据库中数据更新后,可以使用elasticsearchRepository.saveAll()
方法来将新增的数据保存到elasticsearch文档库中。
在我所在的场景下,大概每个月会一下往数据库写入几千条数据,然后一股脑得将之前的数据和新增的数据全部实体交给saveAll()
方法,那么就会占用大量的内存。
问题
今天在执行saveAll()
后访问网站发现502,从宝塔上可以看到网站被关闭了。
执行dmesg
发现由于内存占用太多导致网站线程被关闭:
[18314358.456517] Out of memory: Kill process 29482 (java) score 313 or sacrifice child
[18314358.457800] Killed process 29482 (java), UID 1003, total-vm:3637272kB, anon-rss:1212976kB, file-rss:856kB, shmem-rss:0kB
在执行free -h
查看剩余内存只有100M
total used free shared buff/cache available
Mem: 3.7G 2.8G 172M 2.3M 720M 651M
Swap: 0B 0B 0B
因此判断是由于占用过多内存导致网站挂掉。文章来源:https://www.toymoban.com/news/detail-633930.html
解决
解决方法是优化程序逻辑,只save()
新增的记录来减少服务器压力。文章来源地址https://www.toymoban.com/news/detail-633930.html
到了这里,关于线上宝塔部署的springboot项目在执行elasticsearchRepository.saveAll后就挂掉的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!