oracle/graal · error · IOException

Failed to open %s to dump IGV graphs

Error message

Failed to open %s to dump IGV graphs

What it means

After an IGV network failure (error 34), or when file-based dumping is selected directly, IgvDumpChannel.createFileChannel opens a writable channel at a path supplied by a pathProvider (based on -Dgraal.DumpPath and the file name counter). If PathUtilities.openFileChannel fails — bad path, permission denied, directory missing — the IOException('Failed to open %s to dump IGV graphs') is thrown, chaining the cause.

Source

Thrown at compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/debug/IgvDumpChannel.java:174

            // Ignore races - an extra announcement is ok
            lastTargetAnnouncement = targetAnnouncement;
            TTY.println(targetAnnouncement);
        }
    }

    private static WritableByteChannel createFileChannel(Supplier<String> pathProvider, String networkFailure) throws IOException {
        String path = pathProvider.get();
        try {
            WritableByteChannel channel = PathUtilities.openFileChannel(path, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
            String dir = isDirectory(path, false) ? path : getParent(path);
            if (networkFailure == null) {
                maybeAnnounceTarget("Dumping IGV graphs in " + dir);
            } else {
                maybeAnnounceTarget(networkFailure + ". Dumping IGV graphs in " + dir);
            }
            return channel;
        } catch (IOException e) {
            throw new IOException(String.format("Failed to open %s to dump IGV graphs", path), e);
        }
    }

}

View on GitHub (pinned to a66e9ccd1d)

Solutions

  1. Ensure the -Dgraal.DumpPath directory exists and is writable by the JVM process (mkdir -p + chmod).
  2. Use an absolute dump path to avoid working-directory surprises.
  3. Free disk space if the volume is full; dumping large graphs can consume significant space.
  4. If dumping to IGV over the network was intended, fix the connection (see error 34) so the file fallback is not used.

Example fix

# before
-Dgraal.DumpPath=/read-only-mount/dumps

# after
mkdir -p /tmp/graal-dumps
-Dgraal.DumpPath=/tmp/graal-dumps
Defensive patterns

Strategy: validation

Validate before calling

Path dir = Path.of(dumpPath);
Files.createDirectories(dir);
if (!Files.isWritable(dir)) {
    throw new IOException("Dump path not writable: " + dir.toAbsolutePath());
}
// safe to start the JVM with -Dgraal.Dump and this DumpPath

Try / catch

try {
    dumpGraphs(graph);
} catch (IOException e) {
    if (e.getMessage() != null && e.getMessage().startsWith("Failed to open")) {
        // switch DumpPath to a temp dir and retry once, or drop dumping for this run
    } else {
        throw e;
    }
}

Prevention

When it happens

Trigger: Configuring -Dgraal.DumpPath to a non-existent or read-only directory, a path with illegal characters for the filesystem, the max-file-count/name-collision logic producing an invalid name, or the filesystem being full. Triggered exactly when a dump is attempted (first graph dump of the run).

Common situations: CI sandboxes with read-only output mounts, dump paths relative to a working directory that was never created, long-running daemons whose DumpPath directory was deleted underneath them, or disk exhaustion during heavy dumping.

Related errors


AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14). Data as JSON: /api/errors/c1853797ca44c813. Report an issue: GitHub.