用 verbose GC 分析 IBM WebSphere Portal 的内存问题
2010-06-23 00:00:00 来源:WEB开发网垃圾收集简介
本文针对的是 WebSphere Portal 版本 6.0 或更高版本(和 5.1 或更高版本),其上运行的是 Java™ Software Development Kit (SDK) 1.4.2。为了获得最佳调优,建议使用 SDK 的最新服务发布,对于这里所讨论的调优,至少使用一个新于 SR13 的服务发布。
垃圾收集可简单定义为 JavaTM Virtual Machine (JVM) 释放不再被进程引用或使用的对象的 heap 的行为,heap 是指内存中的一个预先定义的部分,可用来管理 Java 应用程序内的资源。
这个过程有三个主要阶段:mark、sweep 和 compact:
在 mark 阶段,heap 内的所有对象均以一个 bit “标记”。然后检查这些对象看它们是否仍被引用,如果如此,这个 bit 即被删除。
在 sweep 阶段,JVM 遍历整个 heap 并删除仍具有标记 bit 的所有对象;这些对象不再被引用或使用。
compact 阶段只在一个完整的 GC 中才会运行,在这个阶段,GC 会试图将 heap 内的所有对象重新分配到 heap 内的一个更为紧缩、更为连续的较小空间。
垃圾收集如何工作
监视 heap 使用情况的最好的方法是分析这个 verbose GC 的输出。
首先要确保该 verbose GC 在服务器上已被启用:
从 IBM WebSphere Application Server 管理控制台,导航到 Application Servers - WebSphere_Portal - Java and Process Management - Process Definition - Java Virtual Machine。
确保选中 Verbose garbage collection 旁的复选框,然后重启此服务器。
现在,应该可以看到类似于如下的条目被写入到 native_stderr.log 文件:<AF[177]: Allocation Failure. need 528 bytes, 3602594 ms since last AF>
<AF[177]: managing allocation failure, action=1 (0/585421800) (29966688/30811672)>
<GC(177): GC cycle started Fri Sep 21 23:48:29 2007
<GC(177): freed 218620376 bytes, 40% free (248587064/616233472), in 459 ms>
<GC(177): mark: 422 ms, sweep: 37 ms, compact: 0 ms>
<GC(177): refs: soft 0 (age >= 32), weak 11, final 7424, phantom 0>
<AF[177]: completed in 460 ms>
更多精彩
赞助商链接