我是使用Apache駱駝的新手,但是從我的各種測試中我意識到,使用JMS作爲隊列通道會造成內存泄漏,因爲在每次使用消息後使用的內存不會減少。Apache Camel JMS內存泄露?
一個簡單的例子會更好地描述它:
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
context.addComponent("experimental", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file://test").to("experimental:queue:test");
}
});
context.addRoutes(new RouteBuilder() {
public void configure() {
from("experimental:queue:test").to("stream:out");
}
});
Main main = new Main();
main.getCamelContexts().add(context);
main.run();
}
有沒有什麼辦法來強制GC清理隊列或刷新其點播內容? 有沒有更好的方法來使用駱駝這樣的解決方案?
乾杯!
爲什麼你有這些空anon處理器impls?他們似乎沒有做任何事情。我認爲你的路線可以表示爲:from(「file:// test」).to(「experimental:queue:test」);從(「實驗:隊列:試驗」),以(「流:出」); – 2012-07-19 15:30:26
是的,處理器與問題無關,因此我刪除了它們的內容。也許我應該刪除它們,對不起。 – 2012-07-20 06:22:26
我刪除了空的處理器。還有一個問題。你是如何診斷內存泄漏的?堆只是在增長,但是在每次GC之後又會變小,或者它保持很大,並且在一段時間後會出現內存不足異常? – 2012-07-20 07:01:56