[jboss-user] [JBoss Cache] New message: "StackOverflow after OutOfMemory"

Mihir Patel do-not-reply at jboss.com
Tue Mar 9 00:19:53 EST 2010


User development,

A new message was posted in the thread "StackOverflow after OutOfMemory":

http://community.jboss.org/message/530679#530679

Author  : Mihir Patel
Profile : http://community.jboss.org/people/mihirp

Message:
--------------------------------------------------------------
Hello everyone,
 
We are usinghttp://www.jasig.org/cas version 3.3.5 which has support for JBossCache and we are using JBoss Cache 3.2.1 with JGroups 2.6.13 on tomcat 6.0.20.
 
All tickets generated by CAS application are stored as attributes under single node "ticket" so the Cache structure looks something like below:
\ <root node>
   \ticket {key1=value1, key2=value2} (here key1 is ticket and value1 is one object representing that ticket with id key1)
 
so, as you can see the cache will continue growing horizontally, with single node "ticket" and everything else would be added as attributes to that node.
 
We are using READ_COMMITTED isolation level with SYNC replication using TCP protocol for replication through JGroups. We are not using any inbuilt eviction policy, instead there is a thread running which goes through all the key/value pair and calls "isExpire" method on the object (value) and removes any expired ticket attributes from the cache. We also have state transferred enable. Please see attached config.
 
Here is the stack trace for OutOfMemory:
2010-02-26 12:39:23,518 ERROR [org.jasig.cas.ticket.registry.JBossCacheTicketRegistry] (http-8443-183) org.jboss.cache.CacheException: java.lang.OutOfMemoryError: GC overhead li
mit exceeded
org.jboss.cache.CacheException: java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.jboss.cache.interceptors.InterceptorChain.invoke(InterceptorChain.java:304)
        at org.jboss.cache.invocation.CacheInvocationDelegate.put(CacheInvocationDelegate.java:555)
        at org.jboss.cache.invocation.CacheInvocationDelegate.put(CacheInvocationDelegate.java:560)
        at org.jasig.cas.ticket.registry.JBossCacheTicketRegistry.addTicket(JBossCacheTicketRegistry.java:51)
        at org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:224)
        at org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:241)
        at org.jasig.cas.web.flow.GenerateServiceTicketAction.doExecute(GenerateServiceTicketAction.java:40)
        at org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:192)
        at org.springframework.webflow.engine.AnnotatedAction.execute(AnnotatedAction.java:146)
        at org.springframework.webflow.engine.ActionExecutor.execute(ActionExecutor.java:59)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:156)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.TransitionableState.onEvent(TransitionableState.java:107)
        at org.springframework.webflow.engine.Flow.onEvent(Flow.java:534)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.signalEvent(RequestControlContextImpl.java:205)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:161)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Flow.start(Flow.java:521)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.start(RequestControlContextImpl.java:193)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:177)
        at org.springframework.webflow.executor.FlowExecutorImpl.launch(FlowExecutorImpl.java:187)
        at org.springframework.webflow.executor.support.FlowRequestHandler.handleFlowRequest(FlowRequestHandler.java:125)
        at org.springframework.webflow.executor.mvc.FlowController.handleRequestInternal(FlowController.java:165)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.jasig.cas.web.init.SafeDispatcherServlet.service(SafeDispatcherServlet.java:115)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.inspektr.common.web.ClientInfoThreadLocalFilter.doFilterInternal(ClientInfoThreadLocalFilter.java:48)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.jboss.cache.io.ExposedByteArrayOutputStream.write(ExposedByteArrayOutputStream.java:113)
        at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1838)
        at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1747)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1161)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
        at java.util.HashMap.writeObject(HashMap.java:1000)
        at sun.reflect.GeneratedMethodAccessor166.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:460)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallCommand(CacheMarshaller200.java:519)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:314)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallCommand(CacheMarshaller200.java:519)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:314)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.objectToObjectStream(CacheMarshaller200.java:191)
        at org.jboss.cache.marshall.CacheMarshaller200.objectToObjectStream(CacheMarshaller200.java:136)
2010-02-26 12:39:25,562 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/cas].[cas]] (http-8443-183) Servlet.service() for servlet cas threw exception
java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.jboss.cache.io.ExposedByteArrayOutputStream.write(ExposedByteArrayOutputStream.java:113)
        at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1838)
        at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1747)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1161)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
        at java.util.HashMap.writeObject(HashMap.java:1000)
        at sun.reflect.GeneratedMethodAccessor166.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:460)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallCommand(CacheMarshaller200.java:519)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:314)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallCommand(CacheMarshaller200.java:519)
        at org.jboss.cache.marshall.CacheMarshaller200.marshallObject(CacheMarshaller200.java:314)
        at org.jboss.cache.marshall.CacheMarshaller300.marshallObject(CacheMarshaller300.java:47)
        at org.jboss.cache.marshall.CacheMarshaller200.objectToObjectStream(CacheMarshaller200.java:191)
        at org.jboss.cache.marshall.CacheMarshaller200.objectToObjectStream(CacheMarshaller200.java:136)
2010-02-26 12:39:35,140 ERROR [org.jgroups.protocols.TCP] (http-8443-117) failed handling data from 10.10.22.18:33500
java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.jgroups.protocols.TP.dispatchToThreadPool(TP.java:1352)
        at org.jgroups.protocols.TP.receive(TP.java:1325)
        at org.jgroups.protocols.BasicTCP.receive(BasicTCP.java:258)
        at org.jgroups.blocks.BasicConnectionTable.receive(BasicConnectionTable.java:239)
        at org.jgroups.blocks.BasicConnectionTable.send(BasicConnectionTable.java:307)
        at org.jgroups.protocols.TCP.send(TCP.java:55)
        at org.jgroups.protocols.BasicTCP.sendToSingleMember(BasicTCP.java:219)
        at org.jgroups.protocols.BasicTCP.sendToAllMembers(BasicTCP.java:204)
        at org.jgroups.protocols.TP.doSend(TP.java:1474)
        at org.jgroups.protocols.TP.send(TP.java:1464)
        at org.jgroups.protocols.TP.down(TP.java:1185)
        at org.jgroups.protocols.Discovery.down(Discovery.java:374)
        at org.jgroups.protocols.MERGE2.down(MERGE2.java:175)
        at org.jgroups.protocols.FD_SOCK.down(FD_SOCK.java:360)
        at org.jgroups.protocols.FD.down(FD.java:315)
        at org.jgroups.protocols.VERIFY_SUSPECT.down(VERIFY_SUSPECT.java:95)
        at org.jgroups.protocols.pbcast.NAKACK.send(NAKACK.java:803)
        at org.jgroups.protocols.pbcast.NAKACK.down(NAKACK.java:604)
        at org.jgroups.protocols.pbcast.STABLE.down(STABLE.java:316)
        at org.jgroups.protocols.pbcast.GMS.down(GMS.java:901)
        at org.jgroups.protocols.FRAG2.fragment(FRAG2.java:256)
        at org.jgroups.protocols.FRAG2.down(FRAG2.java:138)
        at org.jgroups.protocols.pbcast.STREAMING_STATE_TRANSFER.down(STREAMING_STATE_TRANSFER.java:377)
        at org.jgroups.protocols.pbcast.FLUSH.down(FLUSH.java:291)
        at org.jgroups.stack.ProtocolStack.down(ProtocolStack.java:461)
        at org.jgroups.JChannel.downcall(JChannel.java:1540)
        at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.down(MessageDispatcher.java:791)
        at org.jgroups.blocks.RequestCorrelator.sendRequest(RequestCorrelator.java:304)
        at org.jgroups.blocks.GroupRequest.sendRequest(GroupRequest.java:531)
        at org.jgroups.blocks.GroupRequest.execute(GroupRequest.java:227)
        at org.jgroups.blocks.MessageDispatcher.castMessage(MessageDispatcher.java:468)
        at org.jboss.cache.marshall.CommandAwareRpcDispatcher$ReplicationTask.call(CommandAwareRpcDispatcher.java:397)
2010-02-26 12:39:45,969 ERROR [org.jgroups.protocols.TCP] (OOB-2,CasNonTxCache-cluster,10.10.22.18:33500) failed handling incoming message
java.lang.OutOfMemoryError: GC overhead limit exceeded
        at org.jgroups.util.ExposedByteArrayOutputStream.write(ExposedByteArrayOutputStream.java:47)
        at java.io.DataOutputStream.writeShort(DataOutputStream.java:150)
        at org.jgroups.Message.writeTo(Message.java:594)
        at org.jgroups.util.Util.messageToByteBuffer(Util.java:792)
        at org.jgroups.protocols.pbcast.NAKACK.sendXmitRsp(NAKACK.java:1045)
        at org.jgroups.protocols.pbcast.NAKACK.handleXmitReq(NAKACK.java:983)
        at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:718)
        at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
        at org.jgroups.protocols.FD.up(FD.java:284)
        at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:307)
        at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
        at org.jgroups.protocols.Discovery.up(Discovery.java:264)
        at org.jgroups.protocols.TP.passMessageUp(TP.java:1273)
        at org.jgroups.protocols.TP.access$100(TP.java:49)
        at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1826)
        at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1805)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
 
We start seeing StackOverflow after the above mentioned OutOfMemory:
2010-02-26 12:41:02,865 ERROR [org.jasig.cas.ticket.registry.JBossCacheTicketRegistry] (http-8443-147) org.jboss.cache.CacheException: java.lang.StackOverflowError
org.jboss.cache.CacheException: java.lang.StackOverflowError
        at org.jboss.cache.interceptors.InterceptorChain.invoke(InterceptorChain.java:304)
        at org.jboss.cache.invocation.CacheInvocationDelegate.put(CacheInvocationDelegate.java:555)
        at org.jboss.cache.invocation.CacheInvocationDelegate.put(CacheInvocationDelegate.java:560)
        at org.jasig.cas.ticket.registry.JBossCacheTicketRegistry.addTicket(JBossCacheTicketRegistry.java:51)
        at org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:224)
        at org.jasig.cas.CentralAuthenticationServiceImpl.grantServiceTicket(CentralAuthenticationServiceImpl.java:241)
        at org.jasig.cas.web.flow.GenerateServiceTicketAction.doExecute(GenerateServiceTicketAction.java:40)
        at org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:192)
        at org.springframework.webflow.engine.AnnotatedAction.execute(AnnotatedAction.java:146)
        at org.springframework.webflow.engine.ActionExecutor.execute(ActionExecutor.java:59)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:156)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.DecisionState.doEnter(DecisionState.java:54)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Transition.execute(Transition.java:212)
        at org.springframework.webflow.engine.TransitionableState.onEvent(TransitionableState.java:107)
        at org.springframework.webflow.engine.Flow.onEvent(Flow.java:534)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.signalEvent(RequestControlContextImpl.java:205)
        at org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:161)
        at org.springframework.webflow.engine.State.enter(State.java:191)
        at org.springframework.webflow.engine.Flow.start(Flow.java:521)
        at org.springframework.webflow.engine.impl.RequestControlContextImpl.start(RequestControlContextImpl.java:193)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:177)
        at org.springframework.webflow.executor.FlowExecutorImpl.launch(FlowExecutorImpl.java:187)
        at org.springframework.webflow.executor.support.FlowRequestHandler.handleFlowRequest(FlowRequestHandler.java:125)
        at org.springframework.webflow.executor.mvc.FlowController.handleRequestInternal(FlowController.java:165)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.jasig.cas.web.init.SafeDispatcherServlet.service(SafeDispatcherServlet.java:115)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.inspektr.common.web.ClientInfoThreadLocalFilter.doFilterInternal(ClientInfoThreadLocalFilter.java:48)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.StackOverflowError
        at org.jboss.cache.mvcc.NodeReference.getFqn(NodeReference.java:257)
        at org.jboss.cache.mvcc.NodeReference.getFqn(NodeReference.java:257)
: (1000+ lines with NodeReference.java:257)
:
 
We have also seen similar stack over flow for NodeReference.isValid method.
 
What I *think* is, due to some event (most probably due to concurrent access or some error like OOM), NodeReference object has reference to its own as a delegate and results into infinite loop causing StackOverflowError.
 
http://fisheye.jboss.org/browse/JBossCache/core/tags/3.2.1.GA/src/main/java/org/jboss/cache/mvcc/NodeReference.java?r=7610 implements InternalNode and has reference to an InternalNode to delegate the calls to underlying UnversionedNode (for READ_COMMITTED isolation level). NodeReference also has setDelegate(InternalNode) method so it is possible to set a NodeReference object as its own delegate which would result in StackOverflowError for method calls which are being delegated. I tried to debug application and simulate some scenarios but have not been able to reproduce the issue yet. Does anyone have faced this issue before? Any hint to reproduce and resolve this issue would be greatly appreciated. 
 
Thank you,
Mihir

--------------------------------------------------------------

To reply to this message visit the message page: http://community.jboss.org/message/530679#530679




More information about the jboss-user mailing list