On Mon, May 29, 2017 at 4:23 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
> Hi
>
> So today the old cruft of the legacy tracer came to bit us. There is
> something called Tracer in camel-core that was used to trace Camel
> messages. Its only in use if you do camelContext.setTracing(true) from
> Camel end users point of view. However it captures trace details
> regardless.
>
> That old cruft has been lingering for a long time, and it was really
> intended to be deprecated sooner (it slipped my radar when we marked
> stuff for @deprecated a little while back) and removed completely in
> Camel 3.0.
>
> Today we have a better way of tracing via Message History EIP and 
> BacklogTracer.
>
> So I am working on disabling that old cruft, and remove parts of it,
> and then make camelContext.setTracing(true) use the new way via
> BacklogTracer / message history to trace instead.
>

Okay I opted to keep the old way with setTracing(true) but found a way
to optimise it so its not adding overhead if tracing is off. We can
then later migrate tracing(true) to use the new way.

>
> There is some before vs after screenshots at
> https://issues.apache.org/jira/browse/CAMEL-11360
>
> .. of a prototype that runs the camel-profile-sample project.
>
>
>
>
> On Sun, May 28, 2017 at 11:31 AM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>> Hi
>>
>> I have found some more spots for optimisations which I have committed
>> over the last couple of days.
>>
>> Its been several years since we last did such things last, and I have
>> to admit we have introduced some code that add more object allocation
>> and a few performance drawbacks since then.
>>
>> So with the help of profilers we should be able to improve the
>> situation for the Camel 2.20 release.
>>
>> I have to give credit to Luca for bring this idea up about making
>> Camel startup faster and look into the number of objects allocated
>> etc. Usually Camel has negligible performance overhead in the grand
>> scheme of things. But we have more fine grained performance statistics
>> today which records the time taken in every step messages are routed.
>> This uses the StopWatch object which we frankly create too many new
>> instances. So by reducing those we can reduce the object allocations
>> and therefore the JVM GC characteristics.
>>
>> In the stuff I have optimised you can find the JIRA tickets with
>> Optimise as prefix. I usually have attached some screenshots from the
>> profiler so you can see before vs after situations).
>>
>>
>> We have two areas that can be improved
>>
>> 1) startup Camel faster (jndi registry, caffine lru cache, and the
>> uuid generator is a bit slow in their constructors)
>> 2) faster routing per message at runtime (potential optimise by
>> reducing object allocations, turn off some features less/seldom in
>> use, optimise code logic in hot-spot areas, reduce size of internal
>> state objects, avoid thread contention from synchronized methods,
>> etc.)
>>
>>
>>
>> On Fri, May 26, 2017 at 3:59 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:
>>> Hi
>>>
>>> We have found a few spots to optimize the camel-core source code for
>>> thread contention and something else.
>>>
>>> You can use a profile tool such as YourKit which is excellent at
>>> identifying spots and visualizing what goes on in the JVM.
>>>
>>> We have used it in the past to optimise stuff. However recently Luca
>>> asked about making Camel startup faster:
>>> https://issues.apache.org/jira/browse/CAMEL-11321
>>>
>>> And although fast startup is not excatly the same as runtime
>>> performance then they are still related. A profile can help identify
>>> places for improvements.
>>>
>>> I have pushed a sample project at
>>> https://github.com/davsclaus/camel-profile-sample
>>>
>>> You can then run this via
>>>
>>>    mvn spring-boot:run
>>>
>>> And then attach YourKit profiler.
>>>
>>> However if you use IDEA then you can start YourKit, then from YourKit
>>> you can choose Integrate with IDE ... and then chose IDEA and then say
>>> ok even if IDEA is also running.
>>>
>>> In IDEA you should see a YourKit icon if you right-click on the
>>> SampleCamelApplication to run this application, then you can chose
>>> that to profile, and it run the app with profiler.
>>>
>>> You then switch to YourKit and you should start see data.
>>> To check for thread contention, then select the "Monitor Usage" tab,
>>> and then click the gear button with the play icon "Start Monitor
>>> Profile" which then starts capture data.
>>>
>>> For YourKit you can request a trial license that works for 2 weeks.
>>>
>>>
>>> --
>>> Claus Ibsen
>>> -----------------
>>> http://davsclaus.com @davsclaus
>>> Camel in Action 2: https://www.manning.com/ibsen2
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2
>
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to