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

Reply via email to