Henrik Hiltunen created JCS-243:
-----------------------------------

             Summary: JCS version 3.2.1 causes thread leak in remote cache 
server
                 Key: JCS-243
                 URL: https://issues.apache.org/jira/browse/JCS-243
             Project: Commons JCS
          Issue Type: Bug
          Components: RMI Remote Cache
    Affects Versions: jcs-3.2.1
            Reporter: Henrik Hiltunen


Hello development team!

When JCS went from version 2.x to 3.x there were some issues with RMI code not 
being migrated to the new version and remote caching did not work. Some of 
there issues were addressed with version 3.2.1, but not all it seems. We tried 
to upgrade to version 3.2.1 and it all seemed fine, at first, but after a 
little while we noticed that the cache server thread count would start to 
increase, and would not stop until the application crashed. There were no 
exceptions in the logs, but after some digging we could see that some classes 
in the org.apache.commons.jcs3.auxiliary.remote package still does not 
implement the Remote interface. Most likely the remote call would not close 
correctly just hang. I did a thread analysis and all hanging threads have the 
same stack
{code:java}
stackTrace:
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
- parking to wait for <0x00000000f1964da8> (a 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at 
java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:341)
at 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block([email protected]/AbstractQueuedSynchronizer.java:506)
at 
java.util.concurrent.ForkJoinPool.unmanagedBlock([email protected]/ForkJoinPool.java:3476)
at 
java.util.concurrent.ForkJoinPool.managedBlock([email protected]/ForkJoinPool.java:3447)
at 
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1630)
at 
java.util.concurrent.LinkedBlockingQueue.take([email protected]/LinkedBlockingQueue.java:435)
at 
java.util.concurrent.ThreadPoolExecutor.getTask([email protected]/ThreadPoolExecutor.java:1062)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1122)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:635)
at java.lang.Thread.run([email protected]/Thread.java:840) {code}
In our own logs we also had this exception during shut down.
{code:java}
May 14, 2025 8:40:01 AM 
org.apache.commons.jcs3.auxiliary.remote.server.RemoteCacheServerFactory 
SEVERE: Problem calling shutdown.
java.rmi.RemoteException: Method is not Remote: interface 
org.apache.commons.jcs3.engine.behavior.ICacheServiceAdmin::public abstract 
void org.apache.commons.jcs3.engine.behavior.ICacheServiceAdmin.shutdown() 
throws java.io.IOException
        at 
java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:212)
        at 
java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:160)
        at jdk.proxy1/jdk.proxy1.$Proxy0.shutdown(Unknown Source)
        at 
org.apache.commons.jcs3.auxiliary.remote.server.RemoteCacheServerFactory.main(RemoteCacheServerFactory.java:404)
 {code}
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to