high app server CPU with Gradebook tool usage

Description

We have recently seen several instances of high app cpu related to gradebook usage. The related stacktrace is shown as follows. However, we are not sure about the related usage pattern.

ajp-apr-127.0.0.1-8009-exec-23" daemon prio=10 tid=0x0000000001b77800 nid=0x5f6d runnable [0x00007fda5165b000]
java.lang.Thread.State: RUNNABLE
at sun.text.ComposedCharIter.next(ComposedCharIter.java:70)
at java.text.RBTableBuilder.addComposedChars(RBTableBuilder.java:182)
at java.text.RBTableBuilder.build(RBTableBuilder.java:158)
at java.text.RBCollationTables.<init>(RBCollationTables.java:83)
at java.text.RuleBasedCollator.<init>(RuleBasedCollator.java:300)
at java.text.RuleBasedCollator.<init>(RuleBasedCollator.java:281)
at org.sakaiproject.tool.gradebook.ui.EnrollmentTableBean$1.compare(EnrollmentTableBean.java:71)
at org.sakaiproject.tool.gradebook.ui.EnrollmentTableBean$1.compare(EnrollmentTableBean.java:66)
at java.util.TimSort.binarySort(TimSort.java:265)
at java.util.TimSort.sort(TimSort.java:208)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
at org.sakaiproject.tool.gradebook.ui.EnrollmentTableBean.transformToOrderedEnrollmentMapWithFunction(EnrollmentTableBean.java:371)
at org.sakaiproject.tool.gradebook.ui.EnrollmentTableBean.getOrderedEnrollmentMapForItem(EnrollmentTableBean.java:262)
at org.sakaiproject.tool.gradebook.ui.AssignmentDetailsBean.init(AssignmentDetailsBean.java:338)
at org.sakaiproject.tool.gradebook.ui.InitializableBean.startRenderResponse(InitializableBean.java:69)
at org.sakaiproject.jsf.component.FlowState.encodeBegin(FlowState.java:131)
at javax.faces.webapp.UIComponentTag.encodeBegin(UIComponentTag.java:467)
at javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:320)
at org.apache.jsp.assignmentDetails_jsp._jspx_meth_sakai_005fflowState_005f0(assignmentDetails_jsp.java:677)
at org.apache.jsp.assignmentDetails_jsp._jspService(assignmentDetails_jsp.java:379)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:286)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
at org.sakaiproject.jsf.app.SakaiViewHandler.renderView(SakaiViewHandler.java:159)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:634)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.sakaiproject.tool.gradebook.ui.RoleFilter.doFilter(RoleFilter.java:145)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at org.sakaiproject.jsf.util.HelperAwareJsfTool.dispatch(HelperAwareJsfTool.java:170)
at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:511)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1482)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:213)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:96)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:73)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1272)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:695)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:197)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)

  • locked <0x00000005bd1c4d40> (a org.apache.tomcat.util.net.SocketWrapper)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

Attachments

1

Activity

Show:

Anthony Whyte March 27, 2013 at 11:16 AM

Merged 2.9.x r121839.

Sam Ottenhoff March 27, 2013 at 10:56 AM

Passed basic regression testing on nightly2 trunk.

Beth Kirschner March 25, 2013 at 10:55 AM

Patch verified and merged to trunk

Zhen Qian March 22, 2013 at 2:11 PM

Attached SAK-23385.diff. It has been code reviewed locally, but I cannot commit to gradebook project. Assigning the ticket back to Sakai pool.

Zhen Qian March 21, 2013 at 10:51 PM

Sort was changed to use RuleBasedCollator.compare in SAK-21743, might affect performance...

Fixed

Details

Priority

Affects versions

Fix versions

Components

Assignee

Reporter

Created March 19, 2013 at 1:39 PM
Updated June 30, 2014 at 3:34 PM
Resolved March 25, 2013 at 10:55 AM