문자 메시지 로 인 한 사고

2949 단어 zabbix
막 밥 을 먹고 나 서 휴대 전화 에 몇 통 의 문자 가 오 는 것 을 보 았 는데, 메모리 가 부족 하 다 고 표시 되 어 서둘러 기계 에 접속 하 였 다.
질문 발견:
8G 메모 리 는 7G 를 차지 하고 자바 프로 세 스 는 설정 되 어 있 습 니 다. -Xms2048m -Xmx2048m  ,그 메모리 어디 갔 어?
마침 azkaban 계산 에 사용 가능 한 메모리 코드 를 보 았 습 니 다. 코드 는 다음 과 같 습 니 다.
private static void readMemoryInfoFile() {
    BufferedReader br = null;
    try {
      br = new BufferedReader(new FileReader(MEMINFO_FILE));
 
      long sizeMemFree = 0;
      long sizeBuffers = 0;
      long sizeCached = 0;
      long sizeSwapCached = 0;
      int count = 0;
      String line = br.readLine();
      while (line != null) {
        if (line.startsWith("MemFree:") || line.startsWith("Buffers:")
            || line.startsWith("Cached") || line.startsWith("SwapCached")) {
          int idx1 = line.indexOf(":");
          int idx2 = line.lastIndexOf("kB");
          String strSize = line.substring(idx1+1, idx2-1).trim();
          
          if (line.startsWith("MemFree:")) {
            sizeMemFree = Long.parseLong(strSize);
          } else if (line.startsWith("Buffers:")) {
            sizeBuffers = Long.parseLong(strSize);
          } else if (line.startsWith("Cached:")) {
            sizeCached = Long.parseLong(strSize);
          } else if (line.startsWith("SwapCached:")) {
            sizeSwapCached = Long.parseLong(strSize);
          }
 
          //all lines read
          if (++count == 4) {
            break;
          }
        }
        line = br.readLine();
      }
 
      if (count < 4) {
        logger.error("Error: less than 4 rows read from /proc/meminfo for free memory information");
      }
 
      long sizeTotal = sizeMemFree + sizeBuffers + sizeCached + sizeSwapCached;
 
      logger.info(String.format("Current system free memory is %d kb (MemFree %d, Buffers %d, Cached %d, SwapCached %d)",
              sizeTotal, sizeMemFree, sizeBuffers, sizeCached, sizeSwapCached));
 
      if (sizeTotal > 0) {
        updateFreeMemAmount(sizeTotal);
      }
    } catch (IOException e) {
      logger.error("Exception in reading memory info file", e);
    } finally {
      try {
        if (br != null) {
          br.close();
        }
      } catch (IOException e) {
        logger.error("Exception in closing the buffered reader", e);
      }
    }
  }
앞으로 기계 의 사용 가능 한 메모 리 를 어떻게 계산 하 는 지 모 르 지 마 세 요!
명령 행 방식 은
cat /proc/meminfo | grep -E "^MemTotal:|^MemFree:|^Buffers:|^Cached:|^SwapCached:"

참고: 
azkaban.execapp.ServerStatisticsServlet.fillRemainingMemoryPercent

좋은 웹페이지 즐겨찾기