症状:
消息的吞吐量间歇性地下降,然后又恢复正常性能。
可能的原因:
可能的原因:代理的内存资源非常低。
由于目的地和代理限制设置不当,代理采取了越来越严格的措施以防止内存过载,这样就导致代理变得非常迟缓,直到堆积的消息得到清除为止。
确认问题的起因:在代理日志中检查内存低的情况:
[B1089]:内存不足,代理正在尝试释放资源
该情况后面会接有一个描述新内存状态和已用内存总量的条目。另外请检查 JVM 堆中的可用内存:
imqcmd metrics bkr -m cxn
当总 JVM 内存接近 JVM 内存最大值时,可用内存就会很低。
解决此问题:
调整 JVM(请参见Java 虚拟机调整)。
增大系统交换空间。
可能的原因:正在发生 JVM 内存回收(垃圾收集)。
内存回收会定期清扫整个系统,以释放内存。发生此操作时,所有的线程都会阻塞。要释放的内存量以及 JVM 堆的大小越大,因内存回收而导致的延迟就越长。
确认问题的起因:监视计算机上的 CPU 使用率。发生内存回收时,CPU 使用率会下降。
另外,使用以下命令行选项启动代理:
- vmargs -verbose:gc
其标准输出指明发生内存回收的时间。
解决此问题:在多个 CPU 的计算机中,将内存回收设置为并行发生:
-XX:+UseParallelGC=true
可能的原因:JVM 使用实时编译器来提高性能。
确认问题的起因:检查有无其他可能的原因导致此问题。
解决此问题:让系统运行一段时间,性能应该会有所改善。