我们在日志中看到一个 Java 异常,我们很难重现该异常。
java.lang.InternalError: inflateInit2 returned Z_STREAM_ERROR
at java.util.zip.Inflater.init(Native Method)
at java.util.zip.Inflater.<init>(Inflater.java:103)
at java.util.zip.ZipFile.getInflater(ZipFile.java:469)
at java.util.zip.ZipFile.getInputStream(ZipFile.java:388)
at java.util.jar.JarFile.getBytes(JarFile.java:424)
at java.util.jar.JarFile.checkForSpecialAttributes(JarFile.java:555)
at java.util.jar.JarFile.hasClassPathAttribute(JarFile.java:518)
at java.util.jar.JavaUtilJarAccessImpl.jarFileHasClassPathAttribute(JavaUtilJarAccessImpl.java:37)
at sun.misc.URLClassPath$JarLoader.getClassPath(URLClassPath.java:1198)
at sun.misc.URLClassPath.getLoader(URLClassPath.java:532)
at sun.misc.URLClassPath.getNextLoader(URLClassPath.java:494)
at sun.misc.URLClassPath.getResource(URLClassPath.java:248)
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
根据https://www.zlib.net/manual.html,inflateInit2
返回以下内容:
如果成功,inflateInit2 返回 Z_OK,如果内存不足,则返回 Z_MEM_ERROR,如果 zlib 库版本与调用者假定的版本不兼容,则返回 Z_VERSION_ERROR,如果参数无效,则返回 Z_STREAM_ERROR,例如指向结构的空指针。
因此,在尝试加载 Java 类时发生异常,并且在访问 JAR 时本地 zlib 调用失败,因为向此调用提供了无效参数。什么可能导致这些参数变得无效?
抛出这个的上下文实际上是一个 Python(Java API 包装)扩展,使用JCC(Apache Lucene)构建,在 CentOS 7 Linux 系统上运行在 Python 2.7.5 和 OpenJDK 1.8.0_212-b04 中。