Also on there is the "tapestry.file-check-interval" which specifies how long Tapestry should wait before rechecking for changes. In production, I set that to "1y" because the files aren't going to change. However I don't know if this affects asset loading or not, but I *think* that once the first hit returns null it won't keep checking? It's worth a try and it certainly won't harm.

Ulrich Stärk wrote:
Doesn't limiting the supported locales to just the ones you support help?

http://tapestry.apache.org/tapestry5.0/guide/conf.html

Uli

Am 29.10.2009 19:39 schrieb Christiansen Merel:
Hello out there,

We're running a quite busy website with tapestry 5.0.18 and we're
hitting a performance problem with the ClasspathResource class.

We're using classpath asset and none of them is localised. For each
hit on a page using a classpath asset, we end having 2 missed queries
on the ClassLoader for potential localized version of the asset. It
does not really slow down the application throughput but we end with
an __huge__ CPU consumption.

The javacore stack shows numerous threads scanning jar files:

3XMTHREADINFO      "[ACTIVE] ExecuteThread: '2' for queue:
'weblogic.kernel.Default (self-tuning)'" (TID:0x3700E400,
sys_thread_t:0x3393D030, state:B, native ID:0x009AB0B3) prio=5
4XESTACKTRACE          at
java/util/zip/ZipFile.getEntry(ZipFile.java:287(Compiled Code))
4XESTACKTRACE          at
java/util/jar/JarFile.getEntry(JarFile.java:283(Compiled Code))
4XESTACKTRACE          at
java/util/jar/JarFile.getJarEntry(JarFile.java:266(Compiled Code))
4XESTACKTRACE          at
sun/misc/URLClassPath$JarLoader.getResource(URLClassPath.java:949(Compiled
Code))
4XESTACKTRACE          at
sun/misc/URLClassPath$JarLoader.findResource(URLClassPath.java:938(Compiled
Code))
4XESTACKTRACE          at
sun/misc/URLClassPath.findResource(URLClassPath.java:299(Compiled
Code))
4XESTACKTRACE          at
java/net/URLClassLoader$3.run(URLClassLoader.java:784(Compiled Code))
4XESTACKTRACE          at
java/security/AccessController.doPrivileged(AccessController.java:219)
4XESTACKTRACE          at
java/net/URLClassLoader.findResource(URLClassLoader.java:781(Compiled
Code))
4XESTACKTRACE          at
java/lang/ClassLoader.getResource(ClassLoader.java:420(Compiled Code))
4XESTACKTRACE          at
java/lang/ClassLoader.getResource(ClassLoader.java:415(Compiled Code))
4XESTACKTRACE          at
java/lang/ClassLoader.getResource(ClassLoader.java:415(Compiled Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/GenericClassLoader.getResourceInternal(GenericClassLoader.java:170(Compiled
Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/GenericClassLoader.getResource(GenericClassLoader.java:187(Compiled
Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/FilteringClassLoader.getResourceInternal(FilteringClassLoader.java:89(Compiled
Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/GenericClassLoader.getResourceInternal(GenericClassLoader.java:155(Compiled
Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/GenericClassLoader.getResource(GenericClassLoader.java:187(Compiled
Code))
4XESTACKTRACE          at
java/lang/ClassLoader.getResource(ClassLoader.java:415(Compiled Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/GenericClassLoader.getResource(GenericClassLoader.java:190(Compiled
Code))
4XESTACKTRACE          at
weblogic/utils/classloaders/ChangeAwareClassLoader.getResource(ChangeAwareClassLoader.java:118(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/ioc/internal/util/ClasspathResource.toURL(ClasspathResource.java:59(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/ioc/internal/util/AbstractResource.exists(AbstractResource.java:137(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/ioc/internal/util/AbstractResource.forLocale(AbstractResource.java:100(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/internal/services/AssetSourceImpl.findRelativeAsset(AssetSourceImpl.java:99(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/internal/services/AssetSourceImpl.getAsset(AssetSourceImpl.java:93(Compiled
Code))
4XESTACKTRACE          at
$AssetSource_124955c0e4c.getAsset($AssetSource_124955c0e4c.java(Compiled
Code))
4XESTACKTRACE          at
org/apache/tapestry5/internal/transform/AbstractIncludeAssetWorker$1.perform(AbstractIncludeAssetWorker.java:79(Compiled
Code))
4XESTACKTRACE          at
fr/poleemploi/d2i/tapestry/navigation/unifiee/components/Bandeau.setupRender(Bandeau.java(Compiled
Code))

The stack comes from weblogic/aix run but the problem is the same on
other platforms as well.

Does anyone has ever experienced such problems ?

The performance penalty seems to be located in the
AbstractResource.forLocale() method, especially the potential.exists()
call. This part of code haven't evolved with the 5.1.x version.

Does anybody have any idea on how to get around this problem ?

Thanks in advance

--
ChristianZen

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to