diff --git a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringUtil.java b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringUtil.java index 9e7aefe4e91df02ab54fe672523da23ed7bcf80f..e1ca37830966f667336ebe1b37c0fc5a64f95037 100644 --- a/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringUtil.java +++ b/apm-commons/apm-util/src/main/java/org/apache/skywalking/apm/util/StringUtil.java @@ -21,10 +21,7 @@ package org.apache.skywalking.apm.util; public final class StringUtil { public static boolean isEmpty(String str) { - if (str == null || "".equals(str) || str.length() == 0) { - return true; - } - return false; + return str == null || str.length() == 0; } public static String join(final char delimiter, final String... strings) { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java index cbbad7f67a21fec8cab498fdd1d9abb441a3d3b3..03a1900a7595deb037e09d84042c2bc291920b70 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java @@ -35,6 +35,8 @@ import org.apache.skywalking.apm.agent.core.context.trace.WithPeerInfo; import org.apache.skywalking.apm.agent.core.dictionary.DictionaryManager; import org.apache.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.apache.skywalking.apm.agent.core.dictionary.PossibleFound; +import org.apache.skywalking.apm.agent.core.logging.api.ILog; +import org.apache.skywalking.apm.agent.core.logging.api.LogManager; import org.apache.skywalking.apm.agent.core.sampling.SamplingService; /** @@ -52,6 +54,9 @@ import org.apache.skywalking.apm.agent.core.sampling.SamplingService; * @author zhang xin */ public class TracingContext implements AbstractTracerContext { + private static final ILog logger = LogManager.getLogger(TracingContext.class); + private long lastWarningTimestamp = 0; + /** * @see {@link SamplingService} */ @@ -506,6 +511,16 @@ public class TracingContext implements AbstractTracerContext { } private boolean isLimitMechanismWorking() { - return spanIdGenerator >= Config.Agent.SPAN_LIMIT_PER_SEGMENT; + if (spanIdGenerator >= Config.Agent.SPAN_LIMIT_PER_SEGMENT) { + long currentTimeMillis = System.currentTimeMillis(); + if (currentTimeMillis - lastWarningTimestamp > 30 * 1000) { + logger.warn(new RuntimeException("Shadow tracing context. Thread dump"), "More than {} spans required to create", + Config.Agent.SPAN_LIMIT_PER_SEGMENT); + lastWarningTimestamp = currentTimeMillis; + } + return true; + } else { + return false; + } } }