private static void getMemInfo(LocalStatisticsImpl stats) {
    try (FileInputStream fileInputStream = new FileInputStream("/proc/meminfo");
        InputStreamReader isr = new InputStreamReader(fileInputStream);
        BufferedReader br = new BufferedReader(isr)) {
      // Assume all values read in are in kB, convert to MB
      String line;
      while ((line = br.readLine()) != null) {
        try {
          if (line.startsWith("MemTotal: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.physicalMemoryLONG,
                (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("MemFree: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.freeMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("SharedMem: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.sharedMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("Buffers: ")) {
            tokenizer.setString(line);
            tokenizer.nextToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.bufferMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("SwapTotal: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.allocatedSwapLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("SwapFree: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.unallocatedSwapLONG,
                (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("Cached: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.cachedMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("Dirty: ")) {
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.dirtyMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          } else if (line.startsWith("Inact_dirty: ")) { // 2.4 kernels
            tokenizer.setString(line);
            tokenizer.skipToken(); // Burn initial token
            stats.setLong(LinuxSystemStats.dirtyMemoryLONG, (tokenizer.nextTokenAsLong() / 1024));
          }
        } catch (NoSuchElementException nsee) {
          // ignore and let that stat not to be updated this time
        }
      }
    } catch (IOException ignore) {
    } finally {
      tokenizer.releaseResources();
    }
  }
Returns the available system memory (free + cached).

@param logger the logger
@return the available memory in bytes
geode-core/src/main/java/org/apache/geode/internal/statistics/platform/LinuxProcFsStatistics.java