服务又收到报警了系列。
某日服务收到内存报警:1
2
3
4
5
6
7
8
9状态:P3故障
名称:mem.used.percent大于85%
指标:mem.used.percent
主机:sec-upm-data-analysis-sf-42851-0.docker.py
节点:hnc-v.upm-data-analysis.upm.sec.sec.didi.com
当前值:92.01
说明:happen(mem.used.percent,#60,60) >90
故障时间:2020-01-10 16:49:20
详情: http://monitor.xiaojukeji.com/#/odin/alarm/event/373081480
一个服务机器(4Core 4G)内存达到了92%。看了下近几天的监控,机器内存持续升高。现场监控图如下:
本能反应看下top:
发现4G docker, 我们的java服务已经占据了2.321G, 再加上docker里还跑着监控服务和日志服务,很容易服务达到3G+的内存。
再看JVM堆内存使用分布:1
jmap -heap 970
这里发现一个很奇怪的地方MaxHeapSize 竟然近30G,而docker的内存只是4G,说明JVM对堆的内存并没有进行实际限制。我们知道Xmx 默认值是物理内存的1/4(宿主机128G),由此怀疑我们的Java服务很可能没有配置XMX。排查代码,果然如此。
遂增加配置:1
-Xmx2g -Xms2g
其他JVM文章: