对于JMS的优化,主要介绍一下Paging Store。
JMS Destination里面的消息,默认是存储在JVM堆内存中的,即使打开了Persistent Store,也会在内存中和Persistent介质(例如File或者JDBC)中都有一份。如果JMS消息比较多,并且消息比较大的时候,会发生 JMS消息占用大量内存的问题。这种情况通常出现在WebLogic Integration应用上,因为WLI大量的使用到了JMS。如果配置了Paging Store,那么达到设定的阈值之后,消息会交换到Store里面,JVM堆内存中只是剩下一个引用,这样可以极大的节省JVM堆内存。当然了,这样会带来一点点的性能消耗。
以File Store为例,配置步骤如下,在WebLogic Console上,
1. Services>JMS>Stores,然后点击Configure a new JMS File Store,填写Directory,然后点击[Create]按钮
2. Services>JMS>Servers,点击你的JMS Server,在下拉列表中选择在第1步创建的Paging Store,然后点击[Apply]按钮
3. 在右侧Thresholds & Quotas,启用Bytes Paging Enabled选项,然后填写Messages Threshold High和Messages Threshold Low选项。这两个选项是当未处理的JMS的Bytes大小达到Messages Threshold High的时候,将会将JMS Message 交换到Store中去;低于Messages Threshold Low的时候,会从Store中再交换回来。Messages Maximum可以不用去设置。当然了,也可以根据消息的数量而不是Bytes大小来设置Paging,但是使用Bytes可能更容易估算和度量。
另外,如果同时启用了Persistent Store和Paging,可能不会看到Paging Store里面有东西,猜测是Paging的时候直接使用的Persistent Store,这样更能够节省资源。具体是什么机制,还得BEA的高手来解答了。