Jetspeed 2
  1. Jetspeed 2
  2. JS2-522

Infinite loop created in PortletWindowAccessorImpl.getWindowFromCache() while under load

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0-FINAL
    • Fix Version/s: 2.1-dev, 2.1
    • Component/s: Aggregation
    • Labels:
      None
    • Environment:
      Solaris 8, Oracle 9, Java 1.5

      Description

      I am running a load test on J2 FINAL (Solaris 8, Java 1.5, Oracle 9) and noticed that the java utilization spiked to 100% (it was running around 45%). I did a thread dump using kill -3 and found 200 of these:

      "TP-Processor1" daemon prio=10 tid=0x01009fc8 nid=0x47 runnable [0xb087f000..0xb0881888]
      at java.util.HashMap.get(HashMap.java:329)
      at org.apache.jetspeed.container.window.impl.PortletWindowAccessorImpl.getWindowFromCache(PortletWindowAccessorImpl.java:226)
      at org.apache.jetspeed.container.window.impl.PortletWindowAccessorImpl.getPortletWindow(PortletWindowAccessorImpl.java:98)
      at org.apache.jetspeed.decoration.DecorationValve.initActionsForFragment(DecorationValve.java:206)
      at org.apache.jetspeed.decoration.DecorationValve.initFragment(DecorationValve.java:434)
      at org.apache.jetspeed.decoration.DecorationValve.initFragment(DecorationValve.java:427)
      at org.apache.jetspeed.decoration.DecorationValve.invoke(DecorationValve.java:98)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.pipeline.valve.impl.ActionValveImpl.invoke(ActionValveImpl.java:132)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.container.ContainerValve.invoke(ContainerValve.java:76)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.profiler.impl.ProfilerValveImpl.invoke(ProfilerValveImpl.java:179)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.security.impl.LoginValidationValveImpl.invoke(LoginValidationValveImpl.java:143)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.security.impl.PasswordCredentialValveImpl.invoke(PasswordCredentialValveImpl.java:148)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at com.covisint.cep.jetspeed.pipeline.LocalizationValveImpl.invoke(LocalizationValveImpl.java:69)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.security.impl.AbstractSecurityValve$1.run(AbstractSecurityValve.java:117)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAsPrivileged(Subject.java:454)
      at org.apache.jetspeed.security.impl.AbstractSecurityValve.invoke(AbstractSecurityValve.java:111)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.container.url.impl.PortalURLValveImpl.invoke(PortalURLValveImpl.java:55)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.capabilities.impl.CapabilityValveImpl.invoke(CapabilityValveImpl.java:128)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at com.covisint.cep.auto.pipeline.AutomotivePortalValve.invoke(AutomotivePortalValve.java:96)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invokeNext(JetspeedPipeline.java:203)
      at org.apache.jetspeed.pipeline.JetspeedPipeline.invoke(JetspeedPipeline.java:185)
      at org.apache.jetspeed.engine.JetspeedEngine.service(JetspeedEngine.java:231)
      at org.apache.jetspeed.engine.JetspeedServlet.doGet(JetspeedServlet.java:212)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:514)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
      at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
      at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
      at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:744)
      at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:674)
      at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:866)
      at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
      at java.lang.Thread.run(Thread.java:595)

      Seems that access to the HashMap windows needs to be synchronized

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            Ethan Adams
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development