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

时间:2019-08-04 13:50:02

标签: java performance visualvm tomcat9 openjdk-11

故事: 我正在解决Web应用程序上的一些性能问题 应用程序背景:此应用程序使用Tomcat9服务器以JavaVelocity Template Engine和前端javaScript编写。

问题: :当我让应用程序运行时,在10-15分钟内,应用程序速度变慢,因此我尝试进行VisualVM分析,并且找到了一些我想与大家分享的痕迹。

enter image description here 更新
我将对其进行更多调试,并在Open

中找到重复调用RandomAccessFile函数的主要原因

这是调用stackeTrace enter image description here

在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:我删除了一些文件名。因为它们是私人的,需要保护 感谢您不要问这些文件是什么:)

0 个答案:

没有答案