myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kito D. Mann (JIRA)" <>
Subject [jira] [Created] (MYFACES-3603) HIGH CPU inflating bytes in ResourceHandlerImpl.handleResourceRequest
Date Wed, 05 Sep 2012 15:03:08 GMT
Kito D. Mann created MYFACES-3603:

             Summary: HIGH CPU inflating bytes in ResourceHandlerImpl.handleResourceRequest
                 Key: MYFACES-3603
             Project: MyFaces Core
          Issue Type: Bug
    Affects Versions: 2.1.7
            Reporter: Kito D. Mann
            Priority: Critical

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
Code)) at java/io/ Code)) at java/io/
Code)) at org/apache/myfaces/application/ResourceHandlerImpl.pipeBytes(
Code)) at org/apache/myfaces/application/ResourceHandlerImpl.handleResourceRequest(
Code)) at org/richfaces/resource/ResourceHandlerImpl.handleResourceRequest(
Code)) at javax/faces/webapp/FacesServlet.service( Code)) at
org/richfaces/webapp/ResourceServlet.httpService( Code))
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.

I have attached a patch that does the same and would like your feedback on my proposal. These
patches are from src taken from Apache MyFaces 2.0.5

-cheers, Rohit Kelapure, Apache Open WebBeans committer 

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