最大化 AIX 上的 Java 性能,第 3 部分: 更多就是更好
2008-11-10 08:26:39 来源:WEB开发网如果观察到堆扩展或收缩得太频繁,可以使用技巧 MEM001 来同时消除收缩和扩展。技巧 MEM005 将消除任何堆收缩。
如果 GC 周期中的标记时间太高,您应该尝试 MEM006。这也可能是由于“标记堆栈溢出 (Mark Stack Overflow)”所导致的。
如果 GC 周期不是由于“分配故障 (Allocation Failure)”所导致的,可以使用技巧 MEM007。不过分布式 GC 调用不会受到此设置的影响。
如果 verbosegc 中指示了过多的压缩,这可能与某个大小调整不足的堆有关。
本机堆
如果应用程序的本机代码发出多个小请求,则使用技巧 MEM008 也许会获得性能提升。但是本机堆调整的最重要部分是确保每一次本机堆分配都与相应的回收相匹配。可以使用 svmon 监视本机堆,并且您可能希望设置 IBM_JAVA_MMAP_JAVA_HEAP=true,以便更清楚地区分 Java 堆和本机堆。除了确保应用程序不会在运行时耗尽本机堆以外,通常没有多少针对本机堆的性能优化余地。
一般技巧集合
下文将把 Java 的命令行参数(在 class/jar 文件名称之前指定)称为“开关”。例如,命令行 java -mx2g hello 具有单个开关 -mx2g。
技巧 MEM001:固定大小的堆
通过同时为初始 (-Xms) 和最大 (-Xmx) Java 堆大小指定相同的值,从而创建固定大小的 Java 堆。指定的值应该足够高到不会导致 OOM,同时要足够低到不会显著增加 GC 周期时间。
请注意:指定固定大小的堆意味着您将不能使用 -Xminf/-Xmaxf/-Xmine/-Xmaxe 来微调 GC 特征。固定大小的堆在许多情况下还容易导致碎片。
技巧 MEM002:可变大小的堆
通过为 -Xms 和 -Xmx 指定不同的值,或者仅指定 -Xmx,从而创建可变大小的 Java 堆。指定的值应该足够高以避免 OOM,但是应该进行调整以避免过多的堆收缩或扩展。
更多精彩
赞助商链接