private String createLineProtocol(JvmGCMetrics metrics, long startNanos, StringBuilder sb) { String gcName = LineProtocolUtils.processTagOrField(metrics.getGcName()); sb.append("jvm_gc_metrics") .append(",AppName=").append(ProfilingConfig.getInstance().getAppName()) .append(",GCName=").append(gcName) .append(" CollectCount=").append(metrics.getCollectCount()).append("i") .append(",CollectTime=").append(metrics.getCollectTime()).append("i") .append(" ").append(startNanos); return sb.toString(); } }
/** * @param metricsList * @return : int[0]:max(api.length) */ private int[] getStatistics(List<JvmGCMetrics> metricsList) { int[] result = {1}; for (int i = 0; i < metricsList.size(); ++i) { JvmGCMetrics metrics = metricsList.get(i); if (metrics == null) { continue; } result[0] = Math.max(result[0], metrics.getGcName().length()); } return result; } }
private void processJVMGCMetrics(long processId, long startMillis, long stopMillis) { gcMetricsProcessor.beforeProcess(processId, startMillis, stopMillis); try { List<GarbageCollectorMXBean> garbageCollectorMxBeans = ManagementFactory.getGarbageCollectorMXBeans(); for (GarbageCollectorMXBean bean : garbageCollectorMxBeans) { JvmGCMetrics gcMetrics = new JvmGCMetrics(bean); gcMetricsProcessor.process(gcMetrics, processId, startMillis, stopMillis); } } finally { gcMetricsProcessor.afterProcess(processId, startMillis, stopMillis); } }
@Override public String format(List<JvmGCMetrics> metricsList, long startMillis, long stopMillis) { int[] statisticsArr = getStatistics(metricsList); int maxGCNameLength = statisticsArr[0]; String dataTitleFormat = "%-" + maxGCNameLength + "s%9s%9s%n"; StringBuilder sb = new StringBuilder((metricsList.size() + 2) * (9 * 3 + 64)); sb.append("MyPerf4J JVM GC Metrics [").append(DateFormatUtils.format(startMillis)).append(", ").append(DateFormatUtils.format(stopMillis)).append("]").append(String.format("%n")); sb.append(String.format(dataTitleFormat, "Name", "Count", "Time")); if (metricsList.isEmpty()) { return sb.toString(); } String dataFormat = "%-" + maxGCNameLength + "s%9d%9d%n"; for (int i = 0; i < metricsList.size(); ++i) { JvmGCMetrics metrics = metricsList.get(i); sb.append(String.format(dataFormat, metrics.getGcName(), metrics.getCollectCount(), metrics.getCollectTime())); } return sb.toString(); }