最大化 AIX 上的 Java 性能,第 4 部分: 监视流量
2008-11-10 08:26:43 来源:WEB开发网技巧 NI002 IPv4 堆栈
如果不希望在应用程序中使用 IPv6,可以将属性 preferIPv4Stack 设置为 true,如下所示:
java -Djava.net.preferIPv4Stack=true <classname>
技巧 NIO003 远程 GC
如果您的应用程序是 RMI 客户机或服务器,也可以将 http://java.sun.com/j2se/1.4.2/docs/guide/rmi/sunrmiproperties.html 处定义的 sun.rmi.dgc.client.gcInterval 和/或 sun.rmi.dgc.server.gcInterval 属性用于 IBM Java。这两个属性都缺省设置为 60 秒,并且基于应用程序的需要,可以增加该间隔以减少多余 GC 周期带来的性能影响。
请注意:该链接顶部的警告以及与未释放分布式对象相关联的风险同样适用于 IBM Java。
技巧 NI004 套接字缓冲区大小
如果您在设置发送和接收缓冲区大小,要注意对 setSendBufferSize(int) 的调用仅用作提示。因此,如果观察到平台之间的性能差异,您应该添加一个对 getSendBufferSize() 的调用,并查看当前平台是否拾取了该提示。在最近报告的一个有关 AIX 的性能问题中,应用程序从其代码中调用了 setSendBufferSize(4096)。AIX 使用了该提示并按请求设置了缓冲区大小,而其他平台则忽略了此调用。因此,在 AIX 上察觉到的性能是糟糕的!从代码中删除此调用会使 AIX 上的应用程序性能提高四倍以上。
一般情况下,您可能希望从应用程序中省略用于调整 TCP/IP 堆栈的调用,因为 AIX 网络堆栈是已经预先微调好了的。
技巧 NI005 连接池
对于 RMI 密集型应用程序,启用线程池允许重用现有的连接而不是为每个新的 RMI 调用创建新连接。要启用线程池,可以设置以下属性:
java -Dsun.rmi.transport.tcp.connectionPool=true <classname>
也可以禁用线程池,如下所示:
java -Dsun.rmi.transport.tcp.noConnectionPool=true <classname>
请注意:最好仅对 RMI 密集型应用程序使用线程池。AIX 上的最新版 Java(1.3.1 SR7 以上,以及 1.4.1 SR2 以上)缺省禁用了线程池。
结束语
本文描述了在处理网络和磁盘 I/O 瓶颈时的常用工具和技术。
下一篇文章将以一般性观察和指向有用参考资料的链接结束本系列。
更多精彩
赞助商链接