服务器疯狂报警:内存占用率极高
1、针对疯狂的告警信息,回忆最近做过的操作
1、调整过容器的cpu核心数 4-->8核
2、调整内存16G-->24G
3、少量优化代码
2、凭感觉,自我的自信 服务器资源都更优秀了,不至于带来内存占用不降反升才对。初步定为代码问题
3、回退版本,运行一段时间,问题重现,内存又爆了。
4、应用为java应用 核心代码中使用了parallelstream parallelstream的并发数与服务器核心数相关,猜测为核心数4-->8导致并发处理翻倍,挤爆内存。
5、修改核心数,问题好转但是未完全解决。持续较长时间,依然出现内存占用率奇高。
6、进入服务器,通过arthas查看 dashboard查看内存区域占用, 怎么各个区域total加和远大于docker容器配置的内存大小?找到答案了,刚才改了容器内存,但是启动参数没有相应的针对性修改,导致虚拟机内存占比低,没触发gc,但是容器内存已经爆了,开始报容器内存占用率高。
7、针对性设置启动参数 使用以上参数已经平稳运行两周。
针对自己业务,通过调整并发数,降低cpu负载
并发流parallelstream 处理并发数为cpu核心数-1 服务并发逻辑又存在大量占用cpu的计算逻辑,cpu会飚的很高,我这里是通过具体情况,多次调整后,在8核cpu的情况下,通过启动参数-Djava.util.concurrent.ForkJoinPool.common.parallelism=5 指定并发数5来降低 cpu使用率的。