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

Negative value may be returned by getFreeSwapSpaceSize() in the docker

    XMLWordPrintable

Details

    Backports

      Description

        Negative values were returned by getFreeSwapSpaceSize() in our docker testing.
        The reason is that current implementation doesn't consider the situation when memory.limit_in_bytes == memory.memsw.limit_in_bytes, which means do not use the swap space at all.

        In src/jdk.management/unix/classes/com/sun/management/internal/OperatingSystemImpl.java, let's see
        ------------------------------------------------
         71 public long getFreeSwapSpaceSize() {
         72 if (containerMetrics != null) {
         73 long memSwapLimit = containerMetrics.getMemoryAndSwapLimit();
         74 long memLimit = containerMetrics.getMemoryLimit();
         75 if (memSwapLimit >= 0 && memLimit >= 0) {
         76 for (int attempt = 0; attempt < MAX_ATTEMPTS_NUMBER; attempt++) {
         77 long memSwapUsage = containerMetrics.getMemoryAndSwapUsage();
         78 long memUsage = containerMetrics.getMemoryUsage();
         79 if (memSwapUsage > 0 && memUsage > 0) {
         80 // We read "memory usage" and "memory and swap usage" not atomically,
         81 // and it's possible to get the negative value when subtracting these two.
         82 // If this happens just retry the loop for a few iterations.
         83 if ((memSwapUsage - memUsage) >= 0) {
         84 return memSwapLimit - memLimit - (memSwapUsage - memUsage);
         85 }
         86 }
         87 }
         88 }
         89 }
         90 return getFreeSwapSpaceSize0();
         91 }
        ------------------------------------------------
        If memSwapLimit (@line 73) equals memLimit (@line 74), then getFreeSwapSpaceSize() may return a negative value @line 84.

        Attachments

          Issue Links

            Activity

              People

                jiefu Jie Fu
                jiefu Jie Fu
                Votes:
                0 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: