Hi All,
I face a performance issue with camel 2.17 running inside tomcat 7.0.65
I can not run more than 20 user per second (with gatling). Over 20 user/s,
the response time increase drastically, the pool of tomcat thread is
completely used (1000 threads), and also the JVM CPU usage.
My configuration contains only one context, inside one route:
- with two endpoints ("from" servlet "to" http4)
- with two xslt transformation (saxon=true)
- a logging in logback of the 4 xml (2 req and 2 res)
I attach the config file.
I did test locally and I mocked the internal service to be sure that all
latency comes from camel. Most requests spends 5 seconds inside camel
before calling internal mock service.
I played with pools sizing but no improve. For tomcat, I use the default
configuration (1000 max thread pool). For http4, I try to add some options
&maxTotalConnections=1000&connectionsPerRoute=1000.
Any advise for investigation with be appreciated.
Regards,
Tarek
<camelContext id="pricing-v1.1-context" trace="false" messageHistory="false" typeConverterExists="Ignore" xmlns:com="http://www.domain.com/bs/common/v1"
xmlns:ecom="http://www.domain.com/schema">
<!-- -->
<!-- Context - Properties -->
<propertyPlaceholder id="pricing-properties"
location="file:///conf/integration-gateway-tra-external/offer/pricing.properties" />
<jmxAgent id="agent" disabled="true"/>
<!-- End points - Public -->
<endpoint id="esb-pricing-v1.1-endpoint" uri="{{esb-pricing-v1.1-endpoint}}">
<property key="servletName" value="CamelServlet" />
<property key="httpMethodRestrict" value="POST" />
<property key="matchOnUriPrefix" value="true" />
</endpoint>
<!-- End point - Routes & Transformations -->
<route id="offer-api-pub-pricing-v1.1-route" streamCache="true" >
<from ref="esb-pricing-v1.1-endpoint" />
<convertBodyTo type="javax.xml.transform.stream.StreamSource"></convertBodyTo>
<to
uri="log:bam.offer.api-pub.pricing.v1_1.rq?level=INFO&showHeaders=true&showStreams=true&showExchangeId=true" />
<!-- Transform v1.1 flow to business quotation service V1 -->
<to uri="xslt:xslt/pricing/pricingRQv1.1_to_bsQuoteRQv1.xslt?saxon=true" />
<!-- Extract partner and country code. Used by the quotation url -->
<setProperty propertyName="partnerCode">
<xpath resultType="java.lang.String">//com:partner/@code</xpath>
</setProperty>
<setProperty propertyName="countryCode">
<xpath resultType="java.lang.String">//com:country/@code</xpath>
</setProperty>
<!-- Call quotation Business Service -->
<to uri="log:bam.offer.bsv.quote.v1.rq?level=INFO&showHeaders=true&showStreams=true&showExchangeId=true" />
<toD uri="{{pricing-wsrest-endpoint}}&bridgeEndpoint=true&throwExceptionOnFailure=true" />
<to uri="log:bam.offer.bsv.quote.v1.rs?level=INFO&showHeaders=true&showStreams=true&showExchangeId=true" />
<!-- Create pricing response v1.1 -->
<!-- Transform business quotation service V1 flow to v1.1 -->
<to uri="xslt:xslt/pricing/bsQuoteRSv1_to_pricingRSv1.1.xslt?saxon=true" />
<to
uri="log:bam.offer.api-pub.pricing.v1_1.rs?level=INFO&showHeaders=true&showStreams=true&showExchangeId=true" />
</route>
</camelContext>