Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.jar.jarfile.init()方法执行时间太长_Java_Performance_Visualvm_Tomcat9_Openjdk 11 - Fatal编程技术网

java.util.jar.jarfile.init()方法执行时间太长

java.util.jar.jarfile.init()方法执行时间太长,java,performance,visualvm,tomcat9,openjdk-11,Java,Performance,Visualvm,Tomcat9,Openjdk 11,故事:我正在解决Web应用程序的一些性能问题 应用背景:该应用程序是用Java编写的,带有Velocity模板引擎,前端javaScript使用Tomcat9服务器 问题:当我让应用程序运行10-15分钟时,应用程序速度会减慢,因此我尝试进行VisualVM评测,并发现了一些痕迹,希望与大家分享 更新 我对它进行了更多的调试,并在RandomAccessFile 这是呼叫stackeTrace 在StandardRoot.java中,我们有一个方法,用于查找资源 private WebRes

故事:我正在解决Web应用程序的一些性能问题 应用背景:该应用程序是用
Java
编写的,带有
Velocity模板引擎
,前端
javaScript
使用Tomcat9服务器

问题:当我让应用程序运行10-15分钟时,应用程序速度会减慢,因此我尝试进行
VisualVM
评测,并发现了一些痕迹,希望与大家分享

更新
我对它进行了更多的调试,并在
RandomAccessFile

这是呼叫stackeTrace

在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配置。我做了一些改变,比如

在context.xml中

<Context>
<Resources cachingAllowed="true" cacheTtl="36000000" cacheMaxSize="51200"/>

.........
..........
</Context>

.........
..........
这有助于我增加缓存对象的时间,如默认情况下cacheTtl为5秒,我将其增加到1小时,并
cachingAllowed
true 并且
cacheMaxSize
设置为50mb

我能够在
StandardRoot.java
中加载和读取这些参数,但我对读取库文件的调用并没有减少

所以基本问题是当我让我的应用程序运行10-15分钟(意味着在Tomcat服务器上运行,但不在web浏览器上使用)时,应用程序会变慢,而当我对应用程序进行评测时,我发现了这一点

java.util.jar.JarFile.init()方法花费了46秒

我需要什么样的解决方案:如果有人面临这种问题,或者知道我现在可以进一步研究的地方,那就好了,现在我面临着困境

提前感谢:)

我删除了一些文件名。因为它们是私人的,需要保护
感谢您没有询问这些文件是什么:)

我发现这里至少有两个问题。1) . JarFile构造函数不太可能成为瓶颈,因为它除了调用
super
之外几乎什么都不做。我建议像这样的操作系统级分析器。2) 对每个请求调用
EventCartridge.addEventHandler
。您所说的方式肯定有问题,因为它会导致昂贵的类加载。@a在这张票中,我的问题与我的问题相同,请仔细检查loook@apangin,我更新了一些调试跟踪,请看一看,看看你能帮到什么:)这与链接的问题不同,因为这个问题是关于
getNextJarEntry
操作的,而不是关于您的构造函数。此外,您还有一个
if(isCachingAllowed())
语句,并说
getResourceInternal
调用是罪魁祸首,尽管它在else子句中,换句话说,它指示
isCachingAllowed()
返回
false
,这与您发布的配置相反…