在六月一个炎炎烈日的周六, 我坐在凉爽的空调房里, 突然发现生产环境有个机器 CPU 一直狂转, 我想着: 这可不行, 本来地球就够热的了, 为了保护环境, 一定要把它的 CPU 降下来.
它是一个 java 应用程序, 进一步查看其它指标, 发现这货还一直报 GC overhead alert, 原来有个二货工程师写的新 bug, 一定要把它找出来.
下载 verbose GC log, 通过 log viewer 一看, 哇, 神奇: 无论老年代, 还是年轻代, 都有非常多的空闲内存. 如下图, 只有放大到 500 倍才能看清楚, 否则都是 Full GC 的黑线....
那么下一步怀疑老年代被占满了, 可是, 还是很失望: 老年代空闲内存多的是
下一步怀疑 System.gc() 或者 Runtime.gc(), 果然被我聪明的猜中了:
那么如何修复这个问题呢?
1
airfling 2019-06-18 08:19:15 +08:00
写 java 最好不要有主动 gc 的吧,一般需要主动 gc 的也是定时去 gc,而不是每次执行完毕就 gc
|
2
senninha 2019-06-18 09:36:42 +08:00
楼主人才。。
ps,"二货工程师"这么吊的吗,显式调用 gc- - |
3
hebin 2019-06-18 09:45:24 +08:00
有点牛逼。。。
|