默认情况下,代理使用大小为 192MB 的 JVM 堆。这对于较大的消息负载来说通常太小,应该增大。
当代理快要耗尽 Java 对象使用的 JVM 堆空间时,它将使用各种技术(如流控制和消息交换)来释放内存。在极端情况下,代理甚至关闭客户端连接以释放内存并减少消息内流。所以最好将最大 JVM 堆空间设置得足够大,以避免这种情况。
但是,与系统的物理内存相比,如果最大 Java 堆空间设置过大,代理将继续增大 Java 堆空间,直至整个系统耗尽内存。这会导致性能的降低、不可预计的代理崩溃和/或影响系统中运行的其他应用程序和服务的行为。通常,需要有足够的物理内存以供操作系统和其他应用程序在计算机上运行。
总的说来,好的方法是:估算正常和峰值系统内存容量,并配置 Java 堆大小,使其足以提供良好性能,但同时不应过大,以免引起系统内存问题。
要更改代理的最小和最大堆大小,请在启动代理时使用 -vmargs 命令行选项。例如:
/usr/bin/imqbrokerd -vmargs "-Xms256m -Xmx1024m"
此命令将启动 Java 堆大小设置为 256MB,将最大 Java 堆大小设置为 1GB。
在 Solaris 或 Linux 上,如果通过 /etc/rc*(即 /etc/init.d/imq)启动代理,请在 /etc/imq/imqbrokerd.conf (Solaris) 或 /etc/opt/sun/mq/imqbrokerd.conf (Linux) 文件中指定代理的命令行参数。有关详细信息,请参见该文件中的注释。
在 Windows 上,如果将代理作为 Window 服务启动,请使用 imqsvcadmin install 命令的 -vmargs 选项指定 JVM 参数。请参见第 13 章,命令行参考中的服务管理器实用程序。
在任何情况下,都应当通过检查代理的日志文件或通过使用 imqcmd metrics bkr -m cxn 命令来验证设置。