Generate java dump when OutOfMemory

22,068

Solution 1

For starter drop the XX options and any options BEFORE VeryLargeObject, otherwise you pass the parameters to the java program and not the JVM

Solution 2

The problem is that -XX:HeapDumpPath spefies a file and not a path.

-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof"

added:

and bestsss is right too, so you need to fix both "errors":

java -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="c:\temp\dump2.hprof" VeryLargeObject

Solution 3

I suspect the jvm could not write to the path and fails silently. For example, this has to be a file name in a directory which exists. If you have a directory D:\workspace it will fail. If you have D:\workspace\heap.hprof it may work. Try creating a blank file of that name first to see you can do this.

Share:
22,068
Andrei Ciobanu
Author by

Andrei Ciobanu

Young padawan.

Updated on July 10, 2022

Comments

  • Andrei Ciobanu
    Andrei Ciobanu almost 2 years

    I have a program that should eventually generate OutOfMemory . The program code is:

    public class VeryLargeObject implements Serializable {
        public static final int SIZE = 1 << 12;
    
        public String tag;
        public int[][] bigOne = new int[SIZE][SIZE];
    
        {
            // Initialize bigOne
            for(int i = 0; i < SIZE ; ++i) {
                for(int j = 0; j < SIZE; ++j) {
                    bigOne[i][j] = (int) (Math.random() * 100);
                }
            }
        }
    
        public VeryLargeObject(String tag) {
            this.tag = tag;
        }
    
        public static void main(String args[]) {
            VeryLargeObject[] vla = new VeryLargeObject[1 << 12];
            for(int i = 0; i < Integer.MAX_VALUE; ++i) {
                vla[i] = new VeryLargeObject("aa");
            }
        }
    }
    

    I run the program with the following parameters:

    java VeryLargeObject -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="D:\workspace"
    

    The program fails with OutOfMemory but no dump file is generated . Do you have any idea why?

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
            at VeryLargeObject.<init>(VeryLargeObject.java:14)
            at VeryLargeObject.main(VeryLargeObject.java:32)
    
  • Vipin
    Vipin over 10 years
    i dont find any documentation for VeryLargeObject , can u give us some authentic link.
  • It's Leto
    It's Leto over 10 years
    '-XX:HeapDumpPath' can also be a path, like this: '-XX:HeapDumpPath=c:/', which will generate dumps with the pattern "java_pid4128.hprof" in the root direcoty of drive C:
  • bestsss
    bestsss about 10 years
    @Vipin, 'VeryLargeObject' is the class containing the main(String[]). Look at the question, itself.
  • Vipin
    Vipin about 10 years
    i did not notice it , well now i got it :)