首页 > 解决方案 > Azure Spring Boot ZipException

问题描述

我在 Azure 应用服务上部署了一个带有嵌入式 tomcat 的 Spring Boot Rest 服务,每隔几周我就会遇到间歇性中断。

每次发生中断时,日志都包含以下条目:

消息:java.util.zip.ZipException:ZIP_Read:读取 zip 文件时出错 ZIP_Read:读取 zip 文件时出错
异常类型:java.util.zip.ZipException
方法失败:java.util.zip.ZipFile.access$1400

使用以下调用堆栈。

java.lang.IllegalStateException:
   at org.apache.catalina.webresources.JarWarResourceSet.getArchiveEntries (JarWarResourceSet.java133)
   at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource (AbstractArchiveResourceSet.java256)
   at org.apache.catalina.webresources.StandardRoot.getResourceInternal (StandardRoot.java281)
   at org.apache.catalina.webresources.CachedResource.validateResource (CachedResource.java97)
   at org.apache.catalina.webresources.Cache.getResource (Cache.java69)
   at org.apache.catalina.webresources.StandardRoot.getResource (StandardRoot.java216)
   at org.apache.catalina.webresources.StandardRoot.getResource (StandardRoot.java206)
   at org.apache.catalina.mapper.Mapper.internalMapWrapper (Mapper.java1027)
   at org.apache.catalina.mapper.Mapper.internalMap (Mapper.java842)
   at org.apache.catalina.mapper.Mapper.map (Mapper.java698)
   at org.apache.catalina.connector.CoyoteAdapter.postParseRequest (CoyoteAdapter.java679)
   at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java336)
   at org.apache.coyote.http11.Http11Processor.service (Http11Processor.java803)
   at org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java66)
   at org.apache.coyote.AbstractProtocol$ConnectionHandler.process (AbstractProtocol.java868)
   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun (NioEndpoint.java1459)
   at org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java49)
   at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java1149)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java624)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run (TaskThread.java61)
   at java.lang.Thread.run (Thread.java748)
Inner exception java.util.zip.ZipException handled at org.apache.catalina.webresources.JarWarResourceSet.getArchiveEntries:
   at java.util.zip.ZipFile.access$1400 (ZipFile.java60)
   at java.util.zip.ZipFile$ZipFileInputStream.read (ZipFile.java734)
   at java.io.FilterInputStream.read (FilterInputStream.java133)
   at java.io.PushbackInputStream.read (PushbackInputStream.java186)
   at java.util.zip.ZipInputStream.readFully (ZipInputStream.java403)
   at java.util.zip.ZipInputStream.readLOC (ZipInputStream.java278)
   at java.util.zip.ZipInputStream.getNextEntry (ZipInputStream.java122)
   at java.util.jar.JarInputStream.<init> (JarInputStream.java83)
   at java.util.jar.JarInputStream.<init> (JarInputStream.java62)
   at org.apache.catalina.webresources.TomcatJarInputStream.<init> (TomcatJarInputStream.java37)
   at org.apache.catalina.webresources.JarWarResourceSet.getArchiveEntries (JarWarResourceSet.java108)
   at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource (AbstractArchiveResourceSet.java256)
   at org.apache.catalina.webresources.StandardRoot.getResourceInternal (StandardRoot.java281)
   at org.apache.catalina.webresources.CachedResource.validateResource (CachedResource.java97)
   at org.apache.catalina.webresources.Cache.getResource (Cache.java69)
   at org.apache.catalina.webresources.StandardRoot.getResource (StandardRoot.java216)
   at org.apache.catalina.webresources.StandardRoot.getResource (StandardRoot.java206)
   at org.apache.catalina.mapper.Mapper.internalMapWrapper (Mapper.java1027)
   at org.apache.catalina.mapper.Mapper.internalMap (Mapper.java842)
   at org.apache.catalina.mapper.Mapper.map (Mapper.java698)
   at org.apache.catalina.connector.CoyoteAdapter.postParseRequest (CoyoteAdapter.java679)
   at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java336)
   at org.apache.coyote.http11.Http11Processor.service (Http11Processor.java803)
   at org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java66)
   at org.apache.coyote.AbstractProtocol$ConnectionHandler.process (AbstractProtocol.java868)
   at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun (NioEndpoint.java1459)
   at org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java49)
   at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java1149)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java624)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run (TaskThread.java61)
   at java.lang.Thread.run (Thread.java748)

一旦发生这种情况,对 rest 服务的所有调用都会返回 500,并且日志会得到另一个类似上面的条目。这种情况一直持续到我手动重新启动应用程序服务。

我正在努力找出问题所在。谷歌搜索异常只返回打开 zip 文件问题的结果。该应用程序本身不执行任何压缩/解压缩,并且调用堆栈似乎表明它是 tomcat 的东西(这可能是由我在 Azure、SpringBoot、JVM 或其他东西上所做的事情引起的)。

CPU 或内存使用率在中断之前似乎很好,因此这似乎不是一个因素。此问题之前没有任何部署或平台更改。

我对下一步该怎么做感到困惑,如果有人能指出我正确的调查方向,将不胜感激。

标签: javaazurespring-boottomcatazure-web-app-service

解决方案


推荐阅读