It may be worth adding a small number of JMH micro benchmarks - not to
be used as performances metrics - on camel core so we can spot
potential regressions.

---
Luca Burgazzoli


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

Reply via email to