private MetricsChartDataVO getJVMGCDiagramData()

in backend/src/main/java/org/apache/iotdb/admin/service/impl/IotDBServiceImpl.java [4014:4105]


  private MetricsChartDataVO getJVMGCDiagramData(
      SessionPool sessionPool,
      SessionDataSetWrapper sessionDataSetWrapper,
      String url,
      Integer port) {
    List<String> timeList = new ArrayList<>();
    List<String> metricnameList = new ArrayList<>();
    metricnameList.add("fgc次数");
    metricnameList.add("ygc次数");
    metricnameList.add("fgc耗时");
    metricnameList.add("ygc耗时");
    List<String> unitList = new ArrayList<>();
    unitList.add("次");
    unitList.add("ms");
    List<String> majorGCCount = new ArrayList<>();
    List<String> minorGCCount = new ArrayList<>();
    List<String> majorGCTime = new ArrayList<>();
    List<String> minorGCTime = new ArrayList<>();
    HashMap<String, List<String>> dataList = new HashMap<>();
    if (port == 6668) {
      port = 8086;
    }
    String sql =
        "select * from "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_count\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_count\".\"action=end of minor GC\".\"cause=Allocation Failure\", "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_count\".\"action=end of major GC\".\"cause=Metadata GC Threshold\", "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Metadata GC Threshold\", "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_total\".\"action=end of minor GC\".\"cause=Allocation Failure\", "
            + "root._metric.\"127.0.0.1:"
            + port
            + "\".\"jvm.gc.pause_total\".\"action=end of major GC\".\"cause=Metadata GC Threshold\" "
            + "order by time desc limit 16";
    MetricsChartDataVO metricsChartDataVO = new MetricsChartDataVO();
    try {
      sessionDataSetWrapper = sessionPool.executeQueryStatement(sql);
      int batchSize = sessionDataSetWrapper.getBatchSize();
      if (batchSize > 0) {
        int count = 0;
        while (sessionDataSetWrapper.hasNext()) {
          count++;
          RowRecord rowRecord = sessionDataSetWrapper.next();
          long timestamp = rowRecord.getTimestamp();
          List<org.apache.iotdb.tsfile.read.common.Field> fields1 = rowRecord.getFields();
          String pattern1 = "HH:mm";
          SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern1);
          timeList.add(simpleDateFormat1.format(timestamp));
          String s1 = fields1.get(2).toString();
          s1 = s1.substring(0, s1.indexOf('.'));
          String s2 = fields1.get(0).toString();
          s2 = s2.substring(0, s2.indexOf('.'));
          String s3 = fields1.get(1).toString();
          s3 = s3.substring(0, s3.indexOf('.'));
          majorGCCount.add(s1 + "次");
          minorGCCount.add((Integer.parseInt(s2) + Integer.parseInt(s3)) + "次");
          majorGCTime.add(Float.parseFloat(fields1.get(5).toString()) + "ms");
          minorGCTime.add(
              (Float.parseFloat(fields1.get(3).toString())
                      + Float.parseFloat(fields1.get(4).toString()))
                  + "ms");
        }
        Collections.reverse(majorGCCount);
        Collections.reverse(minorGCCount);
        Collections.reverse(majorGCTime);
        Collections.reverse(minorGCTime);
        dataList.put(metricnameList.get(0), majorGCCount);
        dataList.put(metricnameList.get(1), minorGCCount);
        dataList.put(metricnameList.get(2), majorGCTime);
        dataList.put(metricnameList.get(3), minorGCTime);
        Collections.reverse(timeList);
        metricsChartDataVO.setTimeList(timeList);
        metricsChartDataVO.setMetricnameList(metricnameList);
        metricsChartDataVO.setDataList(dataList);
        metricsChartDataVO.setUnitList(unitList);
      }
    } catch (IoTDBConnectionException e) {
      e.printStackTrace();
    } catch (StatementExecutionException e) {
      e.printStackTrace();
    }
    return metricsChartDataVO;
  }