过去几天,我在 RedHat Linux 应用服务器中遇到了一些 Full Gc 问题,没有任何负载,示例 gclog 如下所示
2012-02-24T10:37:35.359 + 0530:1194221.789:[完整 GC 1194221.789:[终身:1075903K->1075903K(1075904K),2.6399480 秒] 1560050K->1211377K(1560064K),[永久:143373K->143373K(143616K)],2.6400630 秒] [时间:用户 = 2.63 系统 = 0.01,实际 = 2.64 秒] 2012-02-24T10:37:47.452 + 0530: 1194233.883:[完整 GC 1194233.883:[终身:1075903K->1075903K(1075904K),2.7868630 秒] 1559508K->1215479K(1560064K),[永久:143380K->143380K(143616K)],2.7869970 秒] [时间:用户=2.79 系统=0.00,实际=2.79 秒]
线程处于哑状态时 Console.log 中的条目如下所示
堆 def 新生代总计 484160K,已用 307665K [0x826a0000, 0xa33f0000, 0xa33f0000)
eden 空间 430400K,已使用 71% [0x826a0000、0x95314460、0x9caf0000)
来自空间 53760K,已使用 0% [0x9caf0000、0x9caf0000、0x9ff70000)
到空间 53760K,已使用 0% [0x9ff70000, 0x9ff70000, 0xa33f0000)
老生代总计 1075904K,已用 1075904K [0xa33f0000, 0xe4ea0000, 0xe4ea0000)
空间 1075904K,已使用 100% [0xa33f0000、0xe4ea0000、0xe4ea0000、0xe4ea0000)
压缩永久代共计 137728K,已用 137662K [0xe4ea0000, 0xed520000, 0xf4ea0000)
空间137728K,已使用99%[0xe4ea0000、0xed50fae0、0xed50fc00、0xed520000)
未配置共享空间。
请给我一些监控 gclog 的技巧并提供有关完整 GC 的基本知识。另外,请建议一些文档或教程链接以便彻底理解这个概念。并且告诉我在增加堆大小之前我必须注意哪些参数..???
答案1
垃圾收集不是一个“问题”,它是 Java 的一个核心功能。
即使没有任何活动,它也会定期运行 - 是的,完整的 GC 需要很长时间,但这就是为什么它每小时左右只发生一次。
查看J2SE 的官方 Oracle/Sun 文档了解其工作原理和配置方法