今天早上猛地发现自己的机器在告警。说是内存超过了95%。因为这个应用很稳定,看了看告警,确实早上的时候有超时,按照管理超时会导致线程增加,内存会上升,并且超时恢复后这个内存下不去,只能靠重启。
这是以前。所以今天我也想着晚上这样操作下。但是超哥说,你研究一下看看jvm怎么调整吧,就当学习了。
5555上一次被安排这个使命时间已经久远到我记不得了,甚至可能没有。这块工作一直是龙哥在做,甚至没有给过我任何机会去实操。
超哥:如果你还想学技术的话我来想办法,不想的话就当我没说。
我做的:
1. 看了这个机器目前的配置。
2. 看了这个机器告警时候的cpu和内存。
3. 搜了一下jvm的意思。问了一下ai应该怎么调。
结论:似懂非懂无从下手
12点了,超哥过来要重启机器了,问我搞得怎么样。
我:…… 没看完。
超哥:那么复杂吗?
……
超哥做的:
1. 看了这个机器目前的配置。
2. 看了这个机器告警时候的cpu和内存。但是他增加了一步,去看了这个机器jvm的监控(这个在六翼里)
3. 根据配置和监控分析了一下
4. 去控制台查了一下这个机器内存使用情况 使用命令jcmd ,但是当时命令不记得了,百度了一下,用了下面这篇
百度安全验证https://baijiahao.baidu.com/s?id=1770092926400850127&wfr=spider&for=pc5. 最终结论,机器3.6g,老年代80%就触发一次fullgc,所以机器频繁fullgc没问题,堆内存没得调了,只能改非堆内存,已知非堆内存升高是因为超时导致的线程积压,那么要么以后调整一下线程的配置,要么现在直接改大机器内存。改完后保存并立即生效。机器挨个重启,没有影响线上。
6. 布置作业,去了解一下jvm的这几个配置,去了解一下jcmd查出来的东西怎么看心理有个数,学习一下看线程大小怎么配置。
今日命令:
1. 查看当前机器的pid jps
2. 查看这个pid的内存使用情况 jcmd 1 VM.native_memory summary
据说是因为-XX:NativeMemoryTracking=summary 这里只配置了summary,说以只能看summary,如果配置了detail的话就可以看detail了。但是这里个summary和detail也不知道啥意思。
Native Memory Tracking:
Total: reserved=4272899KB, committed=3102759KB
- Java Heap (reserved=2048000KB, committed=2048000KB)
(mmap: reserved=2048000KB, committed=2048000KB)
- Class (reserved=1189598KB, committed=158558KB)
(classes #25400)
(malloc=3806KB #75488)
(mmap: reserved=1185792KB, committed=154752KB)
- Thread (reserved=333482KB, committed=333482KB)
(thread #324)
(stack: reserved=332044KB, committed=332044KB)
(malloc=1058KB #1641)
(arena=380KB #647)
- Code (reserved=272376KB, committed=133276KB)
(malloc=22776KB #28544)
(mmap: reserved=249600KB, committed=110500KB)
- GC (reserved=52168KB, committed=52168KB)
(malloc=46160KB #792)
(mmap: reserved=6008KB, committed=6008KB)
- Compiler (reserved=770KB, committed=770KB)
(malloc=639KB #1134)
(arena=131KB #3)
- Internal (reserved=281896KB, committed=281896KB)
(malloc=281864KB #372596)
(mmap: reserved=32KB, committed=32KB)
- Symbol (reserved=33163KB, committed=33163KB)
(malloc=28840KB #296392)
(arena=4323KB #1)
- Native Memory Tracking (reserved=12196KB, committed=12196KB)
(malloc=42KB #472)
(tracking overhead=12154KB)
- Arena Chunk (reserved=226KB, committed=226KB)
(malloc=226KB)
- Unknown (reserved=49024KB, committed=49024KB)
(mmap: reserved=49024KB, committed=49024KB)
3. 机器配置
-Xms2000m
-Xmx2000m
-Xmn1000m
-XX:MetaspaceSize=256M
-XX:NativeMemoryTracking=summary
-XX:CMSInitiatingOccupancyFraction=80
-XX:+UseConcMarkSweepGC
cpu 1.0-1.5 内存 3600
mark