From eb52c386c7e51b8812c9369c82975896e14e8221 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 27 Feb 2017 15:37:13 +0800 Subject: [PATCH] Remoe health-report module. Because the HealthCollector is based on ConcurrentHashMap. This triggers a performance issue, when the TPS is very high.( > 500) --- skywalking-commons/pom.xml | 1 - .../skywalking-health-report/pom.xml | 23 ----- .../health/report/HealthCollector.java | 79 ------------------ .../health/report/HeathReading.java | 83 ------------------- skywalking-sniffer/skywalking-api/pom.xml | 5 -- .../api/queue/TraceSegmentProcessQueue.java | 6 +- 6 files changed, 1 insertion(+), 196 deletions(-) delete mode 100644 skywalking-commons/skywalking-health-report/pom.xml delete mode 100644 skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HealthCollector.java delete mode 100644 skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HeathReading.java diff --git a/skywalking-commons/pom.xml b/skywalking-commons/pom.xml index 33782de5a1..238f583e07 100644 --- a/skywalking-commons/pom.xml +++ b/skywalking-commons/pom.xml @@ -13,7 +13,6 @@ skywalking-trace skywalking-logging - skywalking-health-report skywalking-util diff --git a/skywalking-commons/skywalking-health-report/pom.xml b/skywalking-commons/skywalking-health-report/pom.xml deleted file mode 100644 index 95d6d33211..0000000000 --- a/skywalking-commons/skywalking-health-report/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - skywalking-commons - com.a.eye - 3.0-2017 - - 4.0.0 - - skywalking-health-report - jar - - skywalking-health-report - http://maven.apache.org - - - - com.a.eye - skywalking-logging-api - ${project.version} - - - diff --git a/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HealthCollector.java b/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HealthCollector.java deleted file mode 100644 index 601bab84cd..0000000000 --- a/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HealthCollector.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.a.eye.skywalking.health.report; - - -import com.a.eye.skywalking.api.logging.api.ILog; -import com.a.eye.skywalking.api.logging.api.LogManager; - -import java.util.Arrays; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -public class HealthCollector extends Thread { - private static ILog logger = LogManager.getLogger(HealthCollector.class); - private static Map heathReadings = new ConcurrentHashMap(); - private static final long DEFAULT_REPORT_INTERVAL = 60 * 1000; - private final long reportInterval; - private String reporterName; - - private HealthCollector(String reporterName) { - this(DEFAULT_REPORT_INTERVAL); - this.reporterName = reporterName; - } - - private HealthCollector(long reportInterval) { - super("HealthCollector"); - this.setDaemon(true); - this.reportInterval = reportInterval; - } - - public static void init(String reporterName) { - new HealthCollector(reporterName).start(); - } - - public static HeathReading getCurrentHeathReading(String extraId) { - String id = getId(extraId); - if (!heathReadings.containsKey(id)) { - synchronized (heathReadings) { - if (!heathReadings.containsKey(id)) { - if (heathReadings.keySet().size() > 5000) { - logger.warn("use HealthCollector illegal. There is an overflow trend of Server Health Collector Report Data."); - }else { - heathReadings.put(id, new HeathReading(id)); - } - } - } - } - return heathReadings.get(id); - } - - private static String getId(String extraId) { - return "T:" + Thread.currentThread().getName() + "(" + Thread.currentThread().getId() + ")" + (extraId == null ? "" : ",extra:" + extraId); - } - - @Override - public void run() { - while (true) { - try { - Map heathReadingsSnapshot = heathReadings; - heathReadings = new ConcurrentHashMap(); - String[] keyList = heathReadingsSnapshot.keySet().toArray(new String[0]); - Arrays.sort(keyList); - StringBuilder log = new StringBuilder(); - log.append("\n---------" + reporterName + " Health Report---------\n"); - for (String key : keyList) { - log.append(heathReadingsSnapshot.get(key)).append("\n"); - } - log.append("------------------------------------------------\n"); - - logger.info(log.toString()); - - try { - Thread.sleep(reportInterval); - } catch (InterruptedException e) { - } - } catch (Throwable t) { - logger.error("HealthCollector report error.", t); - } - } - } -} diff --git a/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HeathReading.java b/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HeathReading.java deleted file mode 100644 index c413e78b56..0000000000 --- a/skywalking-commons/skywalking-health-report/src/main/java/com/a/eye/skywalking/health/report/HeathReading.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.a.eye.skywalking.health.report; - - -import java.util.HashMap; -import java.util.Map; - -public class HeathReading { - public static final String ERROR = "[ERROR]"; - public static final String WARNING = "[WARNING]"; - public static final String INFO = "[INFO]"; - - private String id; - - private Map datas = new HashMap(); - - /** - * 健康读数,只应该在工作线程中创建 - */ - public HeathReading(String id) { - this.id = id; - } - - public void updateData(String key, String message) { - updateData(key, message, new Object[0]); - } - - public void updateData(String key, String newData, Object... arguments) { - if (datas.containsKey(key)) { - datas.get(key).updateData(newData, arguments); - } else { - datas.put(key, new HeathDetailData(newData, arguments)); - } - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("id<").append(this.id).append(">\n"); - for (Map.Entry data : datas.entrySet()) { - sb.append(data.getKey()).append(data.getValue().toString()).append("\n"); - } - - datas = new HashMap(); - return sb.toString(); - } - - class HeathDetailData { - private String data; - - private long statusTime; - - HeathDetailData(String initialData) { - this(initialData, new Object[0]); - } - - HeathDetailData(String initialData, Object[] arguments) { - data = initialData; - if (arguments.length > 0) - data = String.format(initialData, arguments); - statusTime = System.currentTimeMillis(); - } - - void updateData(String newData, Object... arguments) { - data = newData; - if (arguments.length > 0) - data = String.format(newData, arguments); - statusTime = System.currentTimeMillis(); - } - - String getData() { - return data; - } - - long getStatusTime() { - return statusTime; - } - - @Override - public String toString() { - return data + "(t:" + statusTime + ")"; - } - } -} diff --git a/skywalking-sniffer/skywalking-api/pom.xml b/skywalking-sniffer/skywalking-api/pom.xml index eff87bd7ec..615db5f4f6 100644 --- a/skywalking-sniffer/skywalking-api/pom.xml +++ b/skywalking-sniffer/skywalking-api/pom.xml @@ -36,11 +36,6 @@ disruptor 3.3.6 - - com.a.eye - skywalking-health-report - ${project.version} - com.a.eye skywalking-logging-api diff --git a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/queue/TraceSegmentProcessQueue.java b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/queue/TraceSegmentProcessQueue.java index 7a3ac2d1b0..5da3cc5ec9 100644 --- a/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/queue/TraceSegmentProcessQueue.java +++ b/skywalking-sniffer/skywalking-api/src/main/java/com/a/eye/skywalking/api/queue/TraceSegmentProcessQueue.java @@ -3,8 +3,6 @@ package com.a.eye.skywalking.api.queue; import com.a.eye.skywalking.api.conf.Config; import com.a.eye.skywalking.api.context.TracerContext; import com.a.eye.skywalking.api.context.TracerContextListener; -import com.a.eye.skywalking.health.report.HealthCollector; -import com.a.eye.skywalking.health.report.HeathReading; import com.a.eye.skywalking.trace.TraceSegment; import com.lmax.disruptor.RingBuffer; import com.lmax.disruptor.dsl.Disruptor; @@ -24,8 +22,6 @@ public enum TraceSegmentProcessQueue implements TracerContextListener { try { TraceSegmentHolder data = this.buffer.get(sequence); data.setValue(traceSegment); - - HealthCollector.getCurrentHeathReading("TraceSegmentProcessQueue").updateData(HeathReading.INFO, "receive finished traceSegment."); } finally { this.buffer.publish(sequence); } @@ -36,7 +32,7 @@ public enum TraceSegmentProcessQueue implements TracerContextListener { RingBuffer buffer; TraceSegmentProcessQueue() { - disruptor = new Disruptor(TraceSegmentHolder.Factory.INSTANCE, Config.Disruptor.BUFFER_SIZE, DaemonThreadFactory.INSTANCE); + disruptor = new Disruptor<>(TraceSegmentHolder.Factory.INSTANCE, Config.Disruptor.BUFFER_SIZE, DaemonThreadFactory.INSTANCE); buffer = disruptor.getRingBuffer(); } -- GitLab