故事: 我正在解决Web应用程序上的一些性能问题
应用程序背景:此应用程序使用Tomcat9服务器以Java
,Velocity Template Engine
和前端javaScript
编写。
问题: :当我让应用程序运行时,在10-15分钟内,应用程序速度变慢,因此我尝试进行VisualVM
分析,并且找到了一些我想与大家分享的痕迹。
RandomAccessFile
函数的主要原因
在StandardRoot.java中,我们有一种方法可以查找资源
private WebResource getResource(String path, boolean validate,
boolean useClassLoaderResources) {
if (validate) {
path = validate(path);
}
if (isCachingAllowed()) {
return cache.getResource(path, useClassLoaderResources);
} else {
return getResourceInternal(path, useClassLoaderResources);
}
}
,此函数调用getResourceInternal
导致加载资源
一次又一次,如果仍然可用
我也尝试找到一些Tomcat配置。我对此做了一些更改
in context.xml
<Context>
<Resources cachingAllowed="true" cacheTtl="36000000" cacheMaxSize="51200"/>
.........
..........
</Context>
这可以帮助我增加缓存对象的时间,例如默认情况下cacheTtl为5秒,我将其增加为1小时,cachingAllowed
为true
并且cacheMaxSize
设置为50mb
我能够在StandardRoot.java
中加载和读取这些参数,但是我对读取库文件的调用没有减少。
所以基本问题是 。当我将应用程序运行(意味着在Tomcat服务器上运行但未在网络浏览器上使用)的运行时间为10-15分钟时,应用程序速度变慢,当我对应用程序进行性能分析时,我发现了
java.util.jar.JarFile.init()方法花费了46秒
我需要什么解决方案: :如果有人遇到这种问题,或者知道现在我可以在哪里进一步调查,那就好了,现在我正面临卡住
预先感谢:)
PS:我删除了一些文件名。因为它们是私人的,需要保护 感谢您不要问这些文件是什么:)