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

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

    Details

      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

              • Assignee:
                jiefu Jie Fu
                Reporter:
                jiefu Jie Fu
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: