Hi all, +1 for the zero copy method. Zero copy is supported on linux and unix systems through "java.nio.channels.FileChannel". PR is updated using zero-copy method. As Manuranga suggested "If-modified-Since" will be implemented to decrease the number of subsequent calls.
We have revamped the jaggery app and due to above fix; performance issue solved. Thank you On Thu, Jul 16, 2015 at 4:58 PM, Ayyoob Hamza <[email protected]> wrote: > Hi, > I believe that implementing zero copy[1] to transfer static files would > improve the performance significantly rather than copying it through the > user space. > > [1]http://www.ibm.com/developerworks/library/j-zerocopy/ > > <http://www.ibm.com/developerworks/library/j-zerocopy/> > > *Ayyoob Hamza* > *Software Engineer* > WSO2 Inc.; http://wso2.com > email: [email protected] cell: +94 77 1681010 <%2B94%2077%207779495> > > On Thu, Jul 16, 2015 at 3:57 PM, Manuranga Perera <[email protected]> wrote: > >> one more improved we can easily do, is to respond to "If-Modified-Since". >> this will reduce the size of requests we have to send to subsequent calls. >> >> On Thu, Jul 16, 2015 at 1:18 PM, Rasika Perera <[email protected]> wrote: >> >>> Hi, >>> >>> Please review and merge fix[1] for public jira[2]. Did a load balance >>> test using 10 threads; issue is still seems to exist even though the fix[1] >>> improved the performance of the stream out (average server response time is >>> still growing). >>> >>> IMO unified UI framework should not serve static type files(eg. images, >>> js, css ..etc); instead the container itself must be optimized to do the >>> job. Since we are using virtual paths here; simply escaping static file >>> serving from the framework would not be possible. >>> >>> Virtual Path: {context}/public/{unit-name}/{resource-path} >>> Real Path: {context}/units/{unit-name}/public/{resources-path} >>> >>> Virtual Path: >>> https://localhost:9443/iotserver/public/arduino/images/arduino.png >>> Real Path: https://localhost:9443/iotserver >>> /units/arduino/public/images/arduino.png >>> >>> As per offline discussion, in order to solve this Manuranga is writing >>> a front layer in java for the UUI framework. >>> >>> Thank you >>> >>> [1] https://github.com/wso2/jaggery/pull/130 >>> [2] https://wso2.org/jira/browse/JAGGERY-408 >>> >>> On Wed, Jul 15, 2015 at 12:13 PM, Manuranga Perera <[email protected]> >>> wrote: >>> >>>> as per our off-line debugging session, issues seems to be in Jaggery >>>> Stream print [1] function. Rasika will look into improving scream copy java >>>> method and check. >>>> >>>> >>>> [1] >>>> https://github.com/wso2/jaggery/blob/master/components/jaggery-core/org.jaggeryjs.jaggery.core/src/main/java/org/jaggeryjs/jaggery/core/manager/CommonManager.java >>>> >>>> On Wed, Jul 15, 2015 at 3:40 AM, Manuranga Perera <[email protected]> >>>> wrote: >>>> >>>>> Let's take a JFR snapshot and see what's really taking time. I am >>>>> guessing its reading of the definition files. We can cache the unit >>>>> definitions if that's the case. >>>>> On 15 Jul 2015 00:24, "Rasika Perera" <[email protected]> wrote: >>>>> >>>>>> Hi All, >>>>>> >>>>>> We have setup a Jaggery App written using Unified UI sharable >>>>>> components framework on top of a WSO2 server pack. >>>>>> >>>>>> When increasing the number of concurrent users we are experiencing a >>>>>> huge performance drop in the server. In the middle of an internal >>>>>> training >>>>>> session we tried to access the Jaggery Application using 9-10 concurrent >>>>>> browser terminals. Server tends to hits 100% CPU usage when trying to >>>>>> accessing webapp. >>>>>> >>>>>> At the server side we are getting following error intermittently; >>>>>> >>>>>> [2015-07-14 23:31:58,270] ERROR >>>>>>> {org.jaggeryjs.jaggery.core.manager.WebAppManager} - >>>>>>> org.mozilla.javascript.WrappedException: Wrapped >>>>>>> org.jaggeryjs.scriptengine.exceptions.ScriptException: >>>>>>> org.apache.catalina.connector.ClientAbortException: java.io.IOException: >>>>>>> Broken pipe (/iotserver/lib/fuse-router.js#92) >>>>>>> org.jaggeryjs.scriptengine.exceptions.ScriptException: >>>>>>> org.mozilla.javascript.WrappedException: Wrapped >>>>>>> org.jaggeryjs.scriptengine.exceptions.ScriptException: >>>>>>> org.apache.catalina.connector.ClientAbortException: java.io.IOException: >>>>>>> Broken pipe (/iotserver/lib/fuse-router.js#92) >>>>>> >>>>>> >>>>>> The thread dump of the server is attached[1]. Most of active threads >>>>>> are executing "fuse.js" and "rhino" This issue is reproducible at the >>>>>> local >>>>>> machine when accessing concurrently. >>>>>> >>>>>> "http-nio-9443-exec-14" daemon prio=10 tid=0x00007fc330057000 >>>>>>> nid=0x14eb runnable [0x00007fc30ae26000] >>>>>>> java.lang.Thread.State: RUNNABLE >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:6) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>>> at org.jaggeryjs.rhino.iotserver.lib.c0.call(/iotserver/lib/fuse.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32) >>>>>>> at >>>>>>> org.jaggeryjs.rhino.iotserver.lib.c0._c_anonymous_1(/iotserver/lib/fuse.jag:5) >>>>>> >>>>>> >>>>>> Any help to resolve this issue would be really appreciated. >>>>>> >>>>>> Thank you >>>>>> >>>>>> -- >>>>>> With Regards, >>>>>> >>>>>> *Rasika Perera* >>>>>> Software Engineer >>>>>> M: +94 71 680 9060 E: [email protected] >>>>>> LinkedIn: http://lk.linkedin.com/in/rasika90 >>>>>> >>>>>> WSO2 Inc. www.wso2.com >>>>>> lean.enterprise.middleware >>>>>> >>>>> >>>> >>>> >>>> -- >>>> With regards, >>>> *Manu*ranga Perera. >>>> >>>> phone : 071 7 70 20 50 >>>> mail : [email protected] >>>> >>> >>> >>> >>> -- >>> With Regards, >>> >>> *Rasika Perera* >>> Software Engineer >>> M: +94 71 680 9060 E: [email protected] >>> LinkedIn: http://lk.linkedin.com/in/rasika90 >>> >>> WSO2 Inc. www.wso2.com >>> lean.enterprise.middleware >>> >> >> >> >> -- >> With regards, >> *Manu*ranga Perera. >> >> phone : 071 7 70 20 50 >> mail : [email protected] >> >> _______________________________________________ >> Dev mailing list >> [email protected] >> http://wso2.org/cgi-bin/mailman/listinfo/dev >> >> > -- With Regards, *Rasika Perera* Software Engineer M: +94 71 680 9060 E: [email protected] LinkedIn: http://lk.linkedin.com/in/rasika90 WSO2 Inc. www.wso2.com lean.enterprise.middleware
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
