Hi all,

JBS:    https://bugs.openjdk.java.net/browse/JDK-8242480
Webrev: http://cr.openjdk.java.net/~jiefu/8242480/webrev.00/

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.

It would be better to fix it.
Could you please review it and give me some advice?

Thanks a lot.
Best regards,
Jie

Reply via email to