Great!
2014-03-20 10:01 GMT+01:00 j...@nanthrax.net <j...@nanthrax.net>: > Hi Bengt, > > Yes it's already done. > > Regards > JB > > > -- > Jean-Baptiste Onofré > jbono...@apache.org > http://blog.nanthrax.net > Talend - http://wwx.talend.com > > > ----- Reply message ----- > From: "Bengt Rodehav" <be...@rodehav.com> > To: <user@karaf.apache.org> > Subject: XML unmarshalling performance in Karaf > Date: Thu, Mar 20, 2014 9:38 am > > > OK - thanks JB, > > I guess that means that the next version of Karaf will have this property > set to 0 by default? > > /Bengt > > > 2014-03-19 17:30 GMT+01:00 Jean-Baptiste Onofré <j...@nanthrax.net>: > >> Hi guys, >> >> the reason is explained in: >> https://issues.apache.org/jira/browse/KARAF-2269 >> >> I already set it to 0, but, as you can see in this commit: >> http://mail-archives.apache.org/mod_mbox/karaf-commits/201312.mbox/% >> 3c7dd9a5793f88433d8dbfaed8ebd14...@git.apache.org%3E >> >> I think we fixed the 0 timeout support in ServiceMix Specs 2.3.0 (the >> issue was with 1.9.0). I gonna check and I will set the timeout to 0 if >> it's correctly supported by the specs. >> >> Regards >> JB >> >> >> On 03/19/2014 02:00 PM, Guillaume Nodet wrote: >> >>> Mmh, i would have liked to get away with the explanation ;-) >>> >>> So the problem is related to java specifications, like jaxp, stax, >>> jaxws, jaxb, etc... >>> The packages are usually provided by the JRE and the discovery is done >>> using META-INF/services usually. >>> Unfortunately, this does not work well in OSGi because the application >>> classloader is used for discovery. >>> >>> The servicemix-specs project makes this integration of java specs work >>> in OSGi. >>> Over the years, it has improved in various ways, but now, we have the >>> following: >>> * the discovery part of the various specs is enhanced to be OSGi >>> friendly >>> * those enhanced specs are in the ${karaf.home}/endorsed folder so >>> that they are used instead of the JRE ones >>> * the discovery mechanism will look for an implementation bundle in >>> OSGi, then default to the JRE implementation >>> >>> Historically, the discovery of JRE implementations was not possible, so >>> implementations had to be deployed as bundles. >>> However, given there's no way to order the resolution of bundles >>> sufficiently, we needed a timeout so that when a bundle was using one of >>> the spec, for example the xml parser, the discovery would wait for an >>> implementation bundle to become available. Without that timeout, the >>> discovery could fail during the karaf startup. >>> >>> However, since the JRE implementations can now be leveraged (mostly >>> because the specs are now endorsed instead of being deployed as >>> bundles), that timeout can be safely set to 0 so that the specs won't >>> wait until a bundle implementation is available, but will delegate to >>> the JRE directly if no bundle implementation is present. >>> >>> Some weeks ago, I had a quick chat with Jean-Baptiste about setting back >>> the timeout to 0, but we delayed it for some reason I don't recall. >>> Maybe JB remembers ... >>> >>> >>> 2014-03-19 13:28 GMT+01:00 Bengt Rodehav <be...@rodehav.com >>> <mailto:be...@rodehav.com>>: >>> >>> >>> Hello Guillaume! >>> >>> That made all the difference in the world. The CPU now finally >>> started to work and processing time for 1000 of my exchanges went >>> down to 9s from 38s. >>> >>> But you've got some explaining to do :-) >>> >>> What is the purpose of this property and why is it set as high as >>> 100 ms? Also, what can go wrong if I set it to 0? >>> >>> /Bengt >>> >>> >>> 2014-03-19 11:43 GMT+01:00 Guillaume Nodet <gno...@apache.org >>> <mailto:gno...@apache.org>>: >>> >>> >>> I don't think your problem is concurrency, but just wait. >>> Make the org.apache.servicemix.specs.timeout property is set to >>> 0 in etc/system.properties and retry. >>> >>> >>> 2014-03-19 10:25 GMT+01:00 Bengt Rodehav <be...@rodehav.com >>> <mailto:be...@rodehav.com>>: >>> >>> >>> To clarify, again looking at the sampler info, the locate() >>> method spends all its time waiting which indicates a >>> concurrency/synchronization problem. >>> >>> When googling about this I found the following JIRA: >>> >>> https://issues.apache.org/jira/browse/SMX4-803 >>> >>> This seems to have been fixed though. >>> >>> I'm not exactly sure how the locator works and if I install >>> a locator myself or not. I've tried to see what bundle >>> exports the org.apache.servicemix.specs.locator package but >>> no bundle does that. So I guess it's a private package in >>> some bundle. >>> >>> Perhaps someone can inform me how this works so I can check >>> if I need an updated version of some bundle? >>> >>> /Bengt >>> >>> >>> >>> >>> 2014-03-19 9:56 GMT+01:00 Bengt Rodehav <be...@rodehav.com >>> <mailto:be...@rodehav.com>>: >>> >>> >>> Thanks to Guillaume I managed to get the VisualVM to >>> work with Karaf. >>> >>> I then ran my transformations a number of times while >>> sampling to see where the time is spent. I attach an >>> image from a snapshot from VisualVM. I'm not sure if it >>> will be accepted by the mailing list but if anyone wants >>> to look at it I can send it to your email directly if >>> you want. >>> >>> I'm not an expert on interpreting VisualVM profiling >>> info but it seems to me that in the thread doing the >>> transformation, more than 90% of the time is spent in >>> org.apache.servicemix.specs.locator.OsgiLocator.locate(). >>> This >>> explains why the XML unmarshalling runs so much slower >>> in Karaf than outside of OSGi. >>> Can anyone verify if I'have interpreted this correct? If >>> so, then we have a serious performance problem in the >>> OsgiLocator. >>> >>> /Bengt >>> >>> >>> Infogad bild 1 >>> >>> >>> 2014-03-18 15:28 GMT+01:00 Bengt Rodehav >>> <be...@rodehav.com <mailto:be...@rodehav.com>>: >>> >>> >>> I'm using karaf 2.3.4 and Camel 2.13.3. >>> >>> I've been investigating performance problems with >>> Camel's "sjms" component. Here is the discussion: >>> >>> http://camel.465427.n5.nabble. >>> com/sjms-and-multiple-threads-td5748836.html >>> >>> However, at the end I discovered that my real >>> problem was the unmarshalling of an XML file in >>> Karaf. For some reason, if I unmarshall a certain >>> XML file it takes about 105 ms in Karaf. If I do the >>> same from my Junit test in Eclipse it takes around >>> 10 ms. In fact, in Eclipse it starts with around 30 >>> ms but consecutive calls gradually go down to 7-8 >>> ms. In Karaf it doesn't matter how many times I do >>> the unmarshalling. It stays at about 105 ms >>> everytime. >>> >>> I'm very confused about this. >>> >>> The actual code looks like this (approximately): >>> >>> public MmlMessage unmarshallMmlMessage(String >>> theXml) throws JAXBException { >>> final Unmarshaller unMarshaller = >>> cMmlMessageJAXBcontext.createUnmarshaller(); >>> StreamSource ss = new StreamSource(new >>> StringReader(theXml)); >>> long t0 = System.nanoTime(); >>> JAXBElement<?> mmlMessageElement = >>> unMarshaller.unmarshal(ss, MmlMessage.class); >>> long t1 = System.nanoTime(); >>> MmlMessage mmlMessage = (MmlMessage) >>> mmlMessageElement.getValue(); >>> System.out.println("t1: " + (t1-t0) + " ns"); >>> return mmlMessage; >>> } >>> >>> The MmlMessage class is generated from an XML schema >>> using maven-jaxb2-plugin. But it shouldn't matter >>> since the same classes are used within Karaf as >>> outside of Karaf. >>> >>> I assumed that for some reason I'm not running the >>> same code in Karaf as outside Karaf. When logging >>> the actual class of the unMarshaller variable I get: >>> "com.sun.xml.bind.v2.runtime. >>> unmarshaller.UnmarshallerImpl" >>> both within and outside Karaf. >>> >>> The classloader for the unMarshaller in Karaf is: >>> "org.apache.felix.framework. >>> BundleWiringImpl@5740eacd". >>> >>> I thought I had the answer when I noted that outside >>> Karaf I use the Jaxb implementation that is listed >>> in Camel-jaxb dependencies. This is version 2.1.13. >>> In Karaf I had installed a jaxb version from >>> servicemix bundles namely: >>> >>> <groupId>org.apache. >>> servicemix.bundles</groupId> >>> >>> <artifactId>org.apache. >>> servicemix.bundles.jaxb-impl</artifactId> >>> <version>2.2.1.1_2</version> >>> >>> So I forced my Junit test to use the same servicemix >>> bundles version but it was still equally fast as >>> before. No where near the 105 ms I get in Karaf. >>> >>> I realize that this probably is not a Karaf problem >>> per se. But, I know there are probably lots of >>> people on this mailing that have handled XML a lot >>> in Karaf. Do you have any tips on what to look at? >>> What could cause this performance problem? >>> >>> /Bengt >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >> -- >> Jean-Baptiste Onofré >> jbono...@apache.org >> http://blog.nanthrax.net >> Talend - http://www.talend.com >> > >