Java 雄猫。openJarFile上的死锁。为什么?

Java 雄猫。openJarFile上的死锁。为什么?,java,tomcat,java-8,tomcat8,Java,Tomcat,Java 8,Tomcat8,有时我的服务器(联合国大学服务器上的Tomcat 8.5.15)处于死锁状态。我们得到了一个线程转储,结果是 阻塞线程的堆栈跟踪: org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:63) org.apache.catalina.webresources.AbstractArchiveResourceSe

有时我的服务器(联合国大学服务器上的Tomcat 8.5.15)处于死锁状态。我们得到了一个线程转储,结果是

阻塞线程的堆栈跟踪:

org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntries(AbstractSingleArchiveResourceSet.java:63)
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:256)
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:95)
org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1067)
org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
问题线程的堆栈跟踪:

java.util.zip.ZipFile.open(Native Method)
java.util.zip.ZipFile.(ZipFile.java:219)
java.util.zip.ZipFile.(ZipFile.java:149)
java.util.jar.JarFile.(JarFile.java:166)
java.util.jar.JarFile.(JarFile.java:103)
org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:308)
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:93)
org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:260)
org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)
org.apache.catalina.webresources.CachedResource.validateResource(CachedResource.java:95)
org.apache.catalina.webresources.Cache.getResource(Cache.java:69)
org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)
org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)
org.apache.catalina.loader.WebappClassLoaderBase.getResourceAsStream(WebappClassLoaderBase.java:1067)
org.apache.xerces.parsers.SecuritySupport$6.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
org.apache.xerces.parsers.SecuritySupport.getResourceAsStream(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.parsers.DOMParser.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
同时,操作系统中打开的文件数量甚至还没有接近最大值。
有没有办法修复它?

这里访问的jar文件在哪里?我不知道是什么jar文件。所有tomcat库都在lib文件夹中。所有应用程序库都位于webapps/ROOT/WEB-INF/lib/通常,所有内容都是标准的。这些目录是本地目录或网络共享或类似的内容。看起来对文件的访问阻止了
java.util.zip.ZipFile.open(本机方法)
返回。
org.apache.catalina.webresources.AbstractSingleArchiveResourceSet
中的一些代码是同步的,因此您可以获得这种效果。不过,我不会称之为死锁,因为一旦文件访问操作完成(成功与否无关紧要),另一个线程应该会很高兴地继续。发生这种情况时CPU的使用情况如何?CPU几乎没有使用