High CPU due to RichFaces concurrent access to the request attributes HashMap
Environment
- JBoss Enterprise Application Platform (EAP)
- Richfaces
Issue
- High CPU.
- The threads using CPU have the following stack trace:
http-10.20.81.200-17180-11" daemon prio=10 tid=0x0000002bbdd01c00 nid=0x19be runnable [0x0000000048db3000..0x0000000048db5ab0] java.lang.Thread.State: RUNNABLE at java.util.HashMap.get(HashMap.java:305) at org.apache.catalina.connector.Request.getAttribute(Request.java:878) at org.apache.catalina.connector.RequestFacade.getAttribute(RequestFacade.java:263) at javax.servlet.ServletRequestWrapper.getAttribute(ServletRequestWrapper.java:82) at com.sun.faces.context.RequestMap.put(ExternalContextImpl.java:1086) at org.ajax4jsf.event.AjaxPhaseListener.afterPhase(AjaxPhaseListener.java:81) at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:104) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:286) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178) at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) ...
Resolution
Use a single a4j:queue to queue ajax requests.
Root Cause
See High CPU due to multiple Java threads accessing HashMap simultaneously.
Diagnostic Steps
Components
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.