myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <>
Subject [jira] [Commented] (MYFACES-3586) Performance improvement in Resource loading - HIGH CPU inflating bytes in ResourceHandlerImpl.handleResourceRequest
Date Fri, 21 Dec 2012 22:17:12 GMT


Leonardo Uribe commented on MYFACES-3586:

I have attached a patch ( MYFACES-3586-1.patch ) using a web config param to enable disable
it. It only use a temporal folder to store the files, but does not apply the solution using
a memory cache, which still sounds overkill because and the end it will be just a bad copy
of the module in apache server. I think it is better to implement the memory cache only if
more information is provided about the real benefit of it.

> Performance improvement in Resource loading - HIGH CPU inflating bytes in ResourceHandlerImpl.handleResourceRequest
> -------------------------------------------------------------------------------------------------------------------
>                 Key: MYFACES-3586
>                 URL:
>             Project: MyFaces Core
>          Issue Type: Improvement
>         Environment: ALL
>            Reporter: Rohit Dilip Kelapure
>         Attachments: MYFACES-3586-1.patch, MYFACES-3586.patch
>   Original Estimate: 48h
>  Remaining Estimate: 48h
> In a high concurrency load test with Apache MyFaces + RichFaces component library we
found that under peak load majority of our web container threads were stuck in this call stack

> at java/util/zip/Inflater.inflateBytes(Native Method)
> at java/util/zip/Inflater.inflate( Code))
> at java/util/zip/ Code))
> at java/util/zip/ Code))
> at java/io/ Code))
> at java/io/ Code))
> at java/io/ Code))
> at org/apache/myfaces/shared_impl/resource/ResourceImpl$
> at java/io/ Code))
> at java/io/ Code))
> at org/apache/myfaces/application/ResourceHandlerImpl.pipeBytes(
> at org/apache/myfaces/application/ResourceHandlerImpl.handleResourceRequest(
> at org/richfaces/resource/ResourceHandlerImpl.handleResourceRequest(
> at javax/faces/webapp/FacesServlet.service( Code))
> at org/richfaces/webapp/ResourceServlet.httpService(
> at org/richfaces/webapp/ResourceServlet.service( Code))

> After looking at the src code of  org.apache.myfaces.application.ResourceHandlerImpl.handleResourceRequest(FacesContext)
 I can see that the ResourceHandlerCache caches the Resource metadata ; however the actual
output of the resource which is written to the outputstream in ResourceHandlerImpl.pipeBytes
is NEVER cached. 
> This causes a scalability problem in our case because each access to the resource involves
cracking open a jar, inflating the bytes and parsing a stream of bytes. This is done multiple
times for the same resource(say a css file) inside the richfaces jar inspite of the resource
not changing. 
> I propose a much needed performance optimization wherein we cache the output of the Resource
handled and stash the output byte[] it as softReference in the ResourceHandlerCache.ResourceValue.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message