GC日志中times表示什么含义?


最近系统出现了运行一段时间后就无法响应的问题,表现就是浏览器的圈圈一直在转,页面没有加载出来。
查看GC的日志,有一些疑问是关于日志中的时间,如下面部分日志:


 1182.030: [GC[YG occupancy: 8729512 K (9216000 K)]1182.030: [Rescan (parallel) , 7.6001940 secs]1189.630: [weak refs processing, 0.0000190 secs] [1 CMS-remark: 262120K(436904K)] 8991632K(9652904K), 7.6004580 secs] [Times: user=86.06 sys=0.42, real=7.60 secs]

13901.282: [GC 13901.283: [ParNew: 8766574K->400883K(9216000K), 1.9300940 secs] 10239467K->1917256K(11578944K), 1.9309390 secs] [Times: user=13.68 sys=0.07, real=1.93 secs]

我有两个问题:

  1. 这两段日志中后面Times的3个时间分别是什么含义?
  2. 因为看到第一个user有86秒多,不知道这个有没有什么影响?

java jvm jvm调优

盗光者卡斯托尔 10 years, 5 months ago

这些时间是GC花费的时间,user是用户态耗费的时间,sys是内核态耗费的时间,real是整个过程实际花费的时间。user+sys是CPU时间,每个CPU core单独计算,所以这个时间可能会是real的好几倍。
从你的日志看,一次ParNew居然回收掉了8G多的内存,程序真得要好好优化一下了。
几点优化的建议:

  1. Xms 可以和 Xmx 设成一样大小,这样可以避免GC之后重新分配内存
  2. Xmn 太大,这其实是你遇到的问题的根本原因,官方推荐配置为整个堆的3/8,对于你的情况,可以试试 -Xmn=4G
三葉D黑猫 answered 10 years, 4 months ago

Your Answer