Hi All, I just realised I'd previously posted this into the DEV group when I should have posted it in the USER group. Reposting in the correct mailing list - Sorry about that...
I'll likely raise a JIRA ticket for this, but I wanted to start with this mailing list. I'll try to explain what we're seeing... We are running a fairly large Tapestry application with hundreds of concurrent users. When under load, we are occasionally seeing an instance go into deadlock, whereby the Tomcat threads max out, but the CPU is virtually zero. This can commonly occur when a new instance starts up under heavy load, but can also happen on an instance that has been running for several days. The log files give clues as to what's happening, but nothing definitive. For example: 2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal} ERROR [2024-11-12T15:26:13,611] PQSL-STAT,start=2024-11-11.14:23:02,instance=i-01da4661bc7f47e18,host=ip-10-242-182-176,sub=main,version=2024.11.0.7644 31/10/2024 07:39:01,hours=25.05,threadBlktime=0,threads=408,run=57,block=38,wait=133,timed=180,locks=[org.apache.tapestry5.services.pageload.PageClassLoaderContextManagerImpl(2),java.util.jar.JarFile(10),java.lang.Object(25),java.io.ExpiringCache(1)],heapuse=16092,heapmax=24849,gc=1, 2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal} ERROR [2024-11-12T15:26:13,611] java.base@11.0.16/java.util.zip.ZipFile.getEntry(ZipFile.java:347)<mailto:java.base@11.0.16/java.util.zip.ZipFile.getEntry(ZipFile.java:347)> 2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal} java.base@11.0.16/java.util.zip.ZipFile$1.getEntry(ZipFile.java:1143)<mailto:java.base@11.0.16/java.util.zip.ZipFile$1.getEntry(ZipFile.java:1143)> 2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal} java.base@11.0.16/java.util.jar.JarFile.getEntry0(JarFile.java:586)<mailto:java.base@11.0.16/java.util.jar.JarFile.getEntry0(JarFile.java:586)> 2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal} java.base@11.0.16/java.util.jar.JarFile.getEntry(JarFile.java:516)<mailto:java.base@11.0.16/java.util.jar.JarFile.getEntry(JarFile.java:516)> 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} java.base@11.0.16/java.util.jar.JarFile.getJarEntry(JarFile.java:478)<mailto:java.base@11.0.16/java.util.jar.JarFile.getJarEntry(JarFile.java:478)> 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:244) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:272) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.Cache.getResource(Cache.java:64) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:211) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:220) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2170) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:797) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1272) 2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1120) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} ERROR [2024-11-12T15:47:08,652] PQSL-STAT,start=2024-11-12.15:46:07,instance=i-05996408538cc4fa2,host=ip-10-243-125-250,sub=main,version=2024.11.0.7644 31/10/2024 07:39:01,hours=0.02,threadBlktime=0,threads=130,run=16,block=12,wait=78,timed=24,locks=[org.apache.tapestry5.internal.plastic.PlasticClassLoader(9),org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl(3)],heapuse=607,heapmax=24849,gc=7, 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} ERROR [2024-11-12T15:47:08,653] org.apache.tapestry5.internal.plastic.PlasticClassPool.realizeTransformedClass(PlasticClassPool.java:164) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.plastic.PlasticClassImpl.createInstantiator(PlasticClassImpl.java:650) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.plastic.PlasticManager.createProxy(PlasticManager.java:289) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.plastic.PlasticManager.createProxy(PlasticManager.java:262) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.plastic.PlasticManager.createProxy(PlasticManager.java:229) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.beanmodel.services.PlasticProxyFactoryImpl.createProxy(PlasticProxyFactoryImpl.java:86) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.beanmodel.internal.services.PropertyConduitSourceImpl.build(PropertyConduitSourceImpl.java:1527) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.beanmodel.internal.services.PropertyConduitSourceImpl.create(PropertyConduitSourceImpl.java:1441) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} $PropertyConduitSource_134db79fe0.create(Unknown Source) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.bindings.PropBindingFactory.newBinding(PropBindingFactory.java:56) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} $BindingFactory_134db7a16b.newBinding(Unknown Source) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} $BindingFactory_134db7a162.newBinding(Unknown Source) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.services.BindingSourceImpl.newBinding(BindingSourceImpl.java:82) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} $BindingSource_134db7a0ba.newBinding(Unknown Source) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.services.PageElementFactoryImpl.parseAttributeExpansionExpression(PageElementFactoryImpl.java:117) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.services.PageElementFactoryImpl.newBinding(PageElementFactoryImpl.java:177) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} $PageElementFactory_134db7a0d5.newBinding(Unknown Source) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.PageLoaderImpl$10.execute(PageLoaderImpl.java:941) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:229) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$300(ComponentAssemblerImpl.java:37) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$2.run(ComponentAssemblerImpl.java:180) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1286) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.assembleEmbeddedComponent(ComponentAssemblerImpl.java:158) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.PageLoaderImpl$12.execute(PageLoaderImpl.java:1021) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.runActions(ComponentAssemblerImpl.java:229) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl.access$300(ComponentAssemblerImpl.java:37) 2024-11-12T15:47:12.497Z {name=ip-10-243-125-250.ec2.internal} org.apache.tapestry5.internal.pageload.ComponentAssemblerImpl$2.run(ComponentAssemblerImpl.java:180) 2024-11-12T16:16:05.913Z {name=ip-10-243-120-52.ec2.internal} ERROR [2024-11-12T16:15:56,585] PQSL-STAT,start=2024-11-11.14:22:40,instance=i-08bb147e7134c32e0,host=ip-10-243-120-52,sub=main,version=2024.11.0.7644 31/10/2024 07:39:01,hours=25.89,threadBlktime=0,threads=436,run=70,block=93,wait=135,timed=130,locks=[org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier$ThreadBoolean(31),java.io.RandomAccessFile(2),org.apache.logging.log4j.core.appender.rolling.RollingFileManager(1),java.lang.Object(45),org.apache.catalina.webresources.CachedResource(14)],heapuse=16444,heapmax=24849,gc=1, 2024-11-12T16:16:05.913Z {name=ip-10-243-120-52.ec2.internal} ERROR [2024-11-12T16:15:56,585] org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:66) 2024-11-12T16:16:05.913Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:246) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:272) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:127) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.Cache.getResource(Cache.java:78) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:211) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:220) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.findResource(WebappClassLoaderBase.java:872) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:981) 2024-11-12T16:16:05.914Z {name=ip-10-243-120-52.ec2.internal} java.base@11.0.16/java.lang.Class.getResource(Class.java:2740)<mailto:java.base@11.0.16/java.lang.Class.getResource(Class.java:2740)> 07:39:01,hours=0.05,threadBlktime=0,threads=135,run=15,block=10,wait=84,timed=26,locks=[org.apache.tapestry5.internal.plastic.PlasticClassPool(3),java.util.concurrent.ConcurrentHashMap$ReservationNode(2),java.util.concurrent.ConcurrentHashMap$Node(1),org.apache.tapestry5.beanmodel.internal.services.PropertyAccessImpl(3),java.lang.Object(1)],heapuse=279,heapmax=24849,gc=1, ERROR [2024-11-14T12:12:47,871] org.apache.tapestry5.internal.plastic.PlasticClassLoader.loadClass(PlasticClassLoader.java:59) java.base@11.0.16/java.lang.ClassLoader.loadClass(ClassLoader.java:522)<mailto:java.base@11.0.16/java.lang.ClassLoader.loadClass(ClassLoader.java:522)> org.apache.tapestry5.internal.plastic.PlasticClassPool.createTransformation(PlasticClassPool.java:511) org.apache.tapestry5.internal.plastic.PlasticClassPool.getPlasticClassTransformation(PlasticClassPool.java:492) org.apache.tapestry5.internal.plastic.PlasticClassPool.loadAndTransformClass(PlasticClassPool.java:399) org.apache.tapestry5.internal.plastic.PlasticClassLoader.loadClass(PlasticClassLoader.java:76) java.base@11.0.16/java.lang.ClassLoader.loadClass(ClassLoader.java:522)<mailto:java.base@11.0.16/java.lang.ClassLoader.loadClass(ClassLoader.java:522)> org.apache.tapestry5.internal.plastic.PlasticClassPool.getClassInstantiator(PlasticClassPool.java:667) org.apache.tapestry5.plastic.PlasticManager.getClassInstantiator(PlasticManager.java:187) org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2.invoke(ComponentInstantiatorSourceImpl.java:436) org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$2.invoke(ComponentInstantiatorSourceImpl.java:385) org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82) org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72) org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1292) org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl.createInstantiatorForClass(ComponentInstantiatorSourceImpl.java:383) org.apache.tapestry5.internal.services.ComponentInstantiatorSourceImpl$$Lambda$351/0x0000000800872040.apply(Unknown Source) java.base@11.0.16/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737)<mailto:java.base@11.0.16/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1737)> Have I uncovered a genuine thread locking issue that I should raise a JIRA ticket for? Or does anyone have any ideas of something I can change to prevent this? I realise I'm only providing a tiny snippet of our overall system, but any suggestions would be welcome. Thank you. Scott Confidentiality note: This e-mail may contain confidential information from Clarivate. If you are not the intended recipient, be aware that any disclosure, copying, distribution or use of the contents of this e-mail is strictly prohibited. If you have received this e-mail in error, please delete this e-mail and notify the sender as soon as possible.