Я использую несколько верблюжьих маршрутов (около 100) в JBoss Fuse. Недавно я получил OutOfMemoryError: Java heap space , поэтому я решил использовать Eclipse Memory Analyzer Tool для поиска утечек.
В отчете показано несколько подозреваемых, но самый большой из них:
11,539 экземпляров из "org.apache.http.impl.conn.PoolingHttpClientConnectionManager", загружено
by "org.apache.felix.framework.BundleWiringImpl $ BundleClassLoaderJava5
@ 0xd16558b8 "занимают 443,624,920 (63,87%) байтов.
В отличие от других проблем с утечками, подробный отчет для этого случая небольшой, всего 4 строки:
класс java.lang.Thread @ 0xd0a9c0c8
\ class org.apache.camel.component.jms.DefaultJmsMessageListenerContainer @
0xd367ee58
. \ class org.apache.camel.component.jms.JmsQueueEndpoint @ 0xd36750d8
.. \ class org.apache.camel.blueprint.BlueprintCamelContext @ 0xd33bcd50
Кажется, что-то не так с http-соединениями, но я действительно не знаю.
Я использую компонент http в pollEnrichers следующим образом:
from(URI_COLA_ENTRADA_STEP)
.pollEnrich().simple("{{URL_CORRELATIVO}}?ruta=STEP", String.class).aggregationStrategy(new EstrategiaCorrelativo()).cacheSize(1).timeout(10000).aggregateOnException(true)
.to(URI_TOPIC_ARTICULOS);
или с ProducerTemplate внутри процессора:
final String URL = exchange.getContext().resolvePropertyPlaceholders("{{URL_PAGO}}");
ProducerTemplate producer = exchange.getContext().createProducerTemplate();
String response = producer.requestBody(URL, "", String.class);
producer.stop();
Итак, как вы видите, я не делаю ничего слишком сложного.
Что может быть причиной проблемы?