RFR: JDK-8319375: test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineLeakThrowable.java runs into OutOfMemoryError: Metaspace on AIX
Matthias Baesken
mbaesken at openjdk.org
Wed Nov 8 08:35:05 UTC 2023
On AIX the test test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineLeakThrowable.java runs into this error:
java.lang.RuntimeException: java.lang.OutOfMemoryError: Metaspace
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:168)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
at jdk.test.lib.compiler.InMemoryJavaCompiler.compile(InMemoryJavaCompiler.java:188)
at RedefineClassHelper.redefineClass(RedefineClassHelper.java:50)
at RedefineLeakThrowable.main(RedefineLeakThrowable.java:64)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at com.sun.javatest.regtest.agent.MainWrapper$MainTask.run(MainWrapper.java:138)
at java.base/java.lang.Thread.run(Thread.java:1570)
Caused by: java.lang.OutOfMemoryError: Metaspace
at java.base/java.time.Duration.<clinit>(Duration.java:149)
at java.base/java.time.temporal.ChronoUnit.<clinit>(ChronoUnit.java:83)
at java.base/java.time.temporal.ChronoField.<clinit>(ChronoField.java:124)
at java.base/java.time.LocalDate.of(LocalDate.java:272)
at java.base/java.time.LocalDate.<clinit>(LocalDate.java:147)
at java.base/java.time.LocalDateTime.<clinit>(LocalDateTime.java:145)
at jdk.zipfs/jdk.nio.zipfs.ZipUtils.dosToJavaTime(ZipUtils.java:216)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem$Entry.readCEN(ZipFileSystem.java:2816)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem$Entry.<init>(ZipFileSystem.java:2778)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.getEntry(ZipFileSystem.java:1941)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.newInputStream(ZipFileSystem.java:859)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.isMultiReleaseJar(ZipFileSystem.java:1444)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.initializeReleaseVersion(ZipFileSystem.java:1416)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.<init>(ZipFileSystem.java:191)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getZipFileSystem(ZipFileSystemProvider.java:125)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.java:120)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager$ArchiveContainer.<init>(JavacFileManager.java:566)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getContainer(JavacFileManager.java:329)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.pathsAndContainers(JavacFileManager.java:1078)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.indexPathsAndContainersByRelativeDirectory(JavacFileManager.java:1033)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager$$Lambda/0x00000328001a3168.apply(Unknown Source)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1228)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.pathsAndContainers(JavacFileManager.java:1021)
at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.list(JavacFileManager.java:777)
at [java.compiler at 22-internal](mailto:java.compiler at 22-internal)/javax.tools.ForwardingJavaFileManager.list(ForwardingJavaFileManager.java:82)
at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager.list(ClientCodeWrapper.java:223)
at jdk.compiler/com.sun.tools.javac.code.ClassFinder.list(ClassFinder.java:752)
at jdk.compiler/com.sun.tools.javac.code.ClassFinder.scanUserPaths(ClassFinder.java:689)
at jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:570)
at jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:311)
at jdk.compiler/com.sun.tools.javac.code.ClassFinder$$Lambda/0x00000328001287f0.complete(Unknown Source)
at jdk.compiler/com.sun.tools.javac.code.Symtab.lambda$addRootPackageFor$8(Symtab.java:855)
Seems the MetaSpace settings of the test need to be adjusted; 17m works on the other platforms but AIX needs 23m.
I tested with higher iteration value in main of RedefineLeakThrowable so see if it is not a leak and with 23m it passes too on AIX with higher iteration value. For some reason, with product binaries 21m was sufficient too (but fastdebug needed a bit more).
Should we keep the old MetaSpace value 17m for non - AIX ?
-------------
Commit messages:
- Adjust start section of the test
- JDK-8319375
Changes: https://git.openjdk.org/jdk/pull/16553/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16553&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8319375
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.org/jdk/pull/16553.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/16553/head:pull/16553
PR: https://git.openjdk.org/jdk/pull/16553
More information about the serviceability-dev
mailing list