Hi All,
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]
[email protected]/java.util.zip.ZipFile.getEntry(ZipFile.java:347)
2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal}
[email protected]/java.util.zip.ZipFile$1.getEntry(ZipFile.java:1143)
2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal}
[email protected]/java.util.jar.JarFile.getEntry0(JarFile.java:586)
2024-11-12T15:26:20.925Z {name=ip-10-242-182-176.ec2.internal}
[email protected]/java.util.jar.JarFile.getEntry(JarFile.java:516)
2024-11-12T15:26:20.926Z {name=ip-10-242-182-176.ec2.internal}
[email protected]/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}
[email protected]/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)
[email protected]/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)
[email protected]/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)
[email protected]/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.