Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8025089

MetaspaceMemoryPoolMXBean.getUsage() throws "Memory Pool not found" error

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • tbd
    • 8, 9
    • core-svc

      I played with various setting of MetaspaceSize/MaxMetaspaceSize and found that some combinations causes " java.lang.InternalError: Memory Pool not found" when I call pool.getUsage()

      To reproduce this bug compile the following program:

      ----- MetaspaceSizeTest.java ---
      import java.lang.management.ManagementFactory;
      import java.lang.management.MemoryPoolMXBean;
      import java.lang.management.MemoryUsage;
      import java.util.List;

      public class MetaspaceSizeTest {

          public static void main(String args[]) {
              MemoryPoolMXBean pool = getMemoryPool("Metaspace");
              MemoryUsage mu = pool.getUsage();
              System.out.println(mu);
          }

          private static MemoryPoolMXBean getMemoryPool(String name) {
              List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
              for (MemoryPoolMXBean pool : pools) {
                  if (pool.getName().equals(name)) {
                      return pool;
                  }
              }
              throw new RuntimeException("Expected to find a memory pool with name " + name);
          }
      }
      ----------------

      and run it as shown bellow:

      # for x in 2m 3m ; do for y in 2m 3m 4m ; do echo "size: $x max: $y" ;java -XX:MetaspaceSize=$x -XX:MaxMetaspaceSize=$y MetaspaceSizeTest ; done ; done;

      You will see:

      size: 2m max: 2m
      Exception in thread "main" java.lang.InternalError: Memory Pool not found
              at sun.management.MemoryPoolImpl.getUsage0(Native Method)
              at sun.management.MemoryPoolImpl.getUsage(MemoryPoolImpl.java:96)
              at MetaspaceSizeTest.main(MetaspaceSizeTest.java:11)

      size: 2m max: 3m
      Exception in thread "main" java.lang.InternalError: Memory Pool not found
              at sun.management.MemoryPoolImpl.getUsage0(Native Method)
              at sun.management.MemoryPoolImpl.getUsage(MemoryPoolImpl.java:96)
              at MetaspaceSizeTest.main(MetaspaceSizeTest.java:11)
      size: 2m max: 4m
      init = 2252800(2200K) used = 2069648(2021K) committed = 2265088(2212K) max = 4194304(4096K)

      size: 3m max: 2m
      Exception in thread "main" java.lang.InternalError: Memory Pool not found
              at sun.management.MemoryPoolImpl.getUsage0(Native Method)
              at sun.management.MemoryPoolImpl.getUsage(MemoryPoolImpl.java:96)
              at MetaspaceSizeTest.main(MetaspaceSizeTest.java:11)

      size: 3m max: 3m
      Exception in thread "main" java.lang.InternalError: Memory Pool not found
              at sun.management.MemoryPoolImpl.getUsage0(Native Method)
              at sun.management.MemoryPoolImpl.getUsage(MemoryPoolImpl.java:96)
              at MetaspaceSizeTest.main(MetaspaceSizeTest.java:11)

      size: 3m max: 4m
      init = 2252800(2200K) used = 2069648(2021K) committed = 2265088(2212K) max = 4194304(4096K)


      ===
      # java -version
      java version "1.8.0-ea"
      Java(TM) SE Runtime Environment (build 1.8.0-ea-b107)
      Java HotSpot(TM) Client VM (build 25.0-b49, mixed mode)

            jgeorge Jini George (Inactive)
            dfazunen Dmitry Fazunenko (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: