diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java index c7871231e..78043f98c 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/conf/SnifferConfigInitializer.java @@ -139,6 +139,7 @@ public class SnifferConfigInitializer { URL resource = SnifferConfigInitializer.class.getClassLoader().getSystemClassLoader().getResource(classResourcePath); if (resource != null) { String urlString = resource.toString(); + logger.debug(urlString); urlString = urlString.substring(urlString.indexOf("file:"), urlString.indexOf('!')); File agentJarFile = null; try { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataBufferService.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataBufferService.java index c7b9ba733..d987e381f 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataBufferService.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/DataBufferService.java @@ -5,6 +5,7 @@ import org.skywalking.apm.agent.core.boot.BootService; import org.skywalking.apm.agent.core.context.TracingContext; import org.skywalking.apm.agent.core.context.TracingContextListener; import org.skywalking.apm.agent.core.context.trace.TraceSegment; +import org.skywalking.apm.agent.core.datacarrier.buffer.BufferStrategy; import org.skywalking.apm.agent.core.datacarrier.consumer.IConsumer; import static org.skywalking.apm.agent.core.conf.Config.Buffer.BUFFER_SIZE; @@ -19,6 +20,7 @@ public class DataBufferService implements BootService, IConsumer, @Override public void bootUp() throws Throwable { carrier = new DataCarrier(CHANNEL_SIZE, BUFFER_SIZE); + carrier.setBufferStrategy(BufferStrategy.IF_POSSIBLE); carrier.consume(this, 1); TracingContext.ListenerManager.add(this); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java index 6e7a19f9f..cdf3a9025 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/Buffer.java @@ -1,8 +1,6 @@ package org.skywalking.apm.agent.core.datacarrier.buffer; -import java.util.ArrayList; import java.util.LinkedList; -import java.util.List; import org.skywalking.apm.agent.core.datacarrier.common.AtomicRangeInteger; /** diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java index 8f826d724..527756ee1 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/buffer/BufferStrategy.java @@ -4,16 +4,7 @@ package org.skywalking.apm.agent.core.datacarrier.buffer; * Created by wusheng on 2016/10/25. */ public enum BufferStrategy { - /** - * 阻塞模式 - */ BLOCKING, - /** - * 复写模式 - */ OVERRIDE, - /** - * 尝试写入模式,无法写入则返回写入失败 - */ IF_POSSIBLE } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java index 4246cfc75..811179562 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/datacarrier/consumer/ConsumerThread.java @@ -13,7 +13,7 @@ public class ConsumerThread extends Thread { private List dataSources; ConsumerThread(String threadName, IConsumer consumer) { - super((threadName)); + super(threadName); this.consumer = consumer; running = false; dataSources = new LinkedList(); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginCfg.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginCfg.java index ce7eeed84..3fae43aa5 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginCfg.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/PluginCfg.java @@ -23,6 +23,9 @@ public enum PluginCfg { String pluginDefine = null; while ((pluginDefine = reader.readLine()) != null) { try { + if (pluginDefine == null || pluginDefine.trim().length() == 0) { + continue; + } PluginDefine plugin = PluginDefine.build(pluginDefine); if (plugin.enable()) { pluginClassList.add(plugin); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java index 093c3079f..e8283adf0 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ClassEnhancePluginDefine.java @@ -2,24 +2,24 @@ package org.skywalking.apm.agent.core.plugin.interceptor.enhance; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.implementation.FieldAccessor; import net.bytebuddy.implementation.MethodDelegation; import net.bytebuddy.implementation.SuperMethodCall; import net.bytebuddy.implementation.bind.annotation.FieldProxy; import net.bytebuddy.implementation.bind.annotation.Morph; import net.bytebuddy.matcher.ElementMatchers; +import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.PluginException; import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.skywalking.apm.agent.core.plugin.interceptor.EnhanceException; import org.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInterceptPoint; -import org.skywalking.apm.util.StringUtil; -import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.logging.ILog; import org.skywalking.apm.logging.LogManager; +import org.skywalking.apm.util.StringUtil; import static net.bytebuddy.jar.asm.Opcodes.ACC_PRIVATE; import static net.bytebuddy.matcher.ElementMatchers.isStatic; -import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.not; /** @@ -95,8 +95,7 @@ public abstract class ClassEnhancePluginDefine extends AbstractClassEnhancePlugi */ newClassBuilder = newClassBuilder.defineField(CONTEXT_ATTR_NAME, Object.class, ACC_PRIVATE) .implement(EnhancedInstance.class) - .method(named("_getSkyWalkingDynamicFiled")) - .intercept(MethodDelegation.to(EnhancedInstanceFieldGetter.class)); + .intercept(FieldAccessor.ofField(CONTEXT_ATTR_NAME)); /** * 2. enhance constructors diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/Constructible.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/Constructible.java deleted file mode 100644 index b58f5d550..000000000 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/Constructible.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.skywalking.apm.agent.core.plugin.interceptor.enhance; - -/** - * @author wusheng - */ -public interface Constructible { - void call(Object[] args); -} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInterWithOverrideArgs.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInterWithOverrideArgs.java deleted file mode 100644 index 65002ac27..000000000 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/ConstructorInterWithOverrideArgs.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.skywalking.apm.agent.core.plugin.interceptor.enhance; - -import net.bytebuddy.implementation.bind.annotation.AllArguments; -import net.bytebuddy.implementation.bind.annotation.FieldProxy; -import net.bytebuddy.implementation.bind.annotation.Morph; -import net.bytebuddy.implementation.bind.annotation.RuntimeType; -import net.bytebuddy.implementation.bind.annotation.This; -import org.skywalking.apm.agent.core.plugin.interceptor.loader.InterceptorInstanceLoader; -import org.skywalking.apm.logging.ILog; -import org.skywalking.apm.logging.LogManager; - -/** - * The actual byte-buddy's interceptor to intercept constructor methods. - * In this class, it provide a bridge between byte-buddy and sky-walking plugin. - * - * @author wusheng - */ -public class ConstructorInterWithOverrideArgs { - private static final ILog logger = LogManager.getLogger(ConstructorInterWithOverrideArgs.class); - - /** - * A class full name, and instanceof {@link InstanceConstructorInterceptor} - * This name should only stay in {@link String}, the real {@link Class} type will trigger classloader failure. - * If you want to know more, please check on books about Classloader or Classloader appointment mechanism. - */ - private String constructorInterceptorClassName; - - /** - * Set the name of {@link ConstructorInterWithOverrideArgs#constructorInterceptorClassName} - * - * @param constructorInterceptorClassName class full name. - */ - public ConstructorInterWithOverrideArgs(String constructorInterceptorClassName) { - this.constructorInterceptorClassName = constructorInterceptorClassName; - } - - /** - * Intercept the target constructor. - * - * @param obj target class instance. - * @param dynamicFieldGetter a proxy to set the dynamic field - * @param dynamicFieldSetter a proxy to get the dynamic field - * @param allArguments all constructor arguments - */ - @RuntimeType - public void intercept(@This Object obj, - @FieldProxy(ClassEnhancePluginDefine.CONTEXT_ATTR_NAME) FieldSetter dynamicFieldSetter, - @FieldProxy(ClassEnhancePluginDefine.CONTEXT_ATTR_NAME) FieldGetter dynamicFieldGetter, - @AllArguments Object[] allArguments, - @Morph(defaultMethod = true) Constructible zuper) { - try { - InstanceConstructorInterceptor interceptor = InterceptorInstanceLoader.load(constructorInterceptorClassName, obj.getClass().getClassLoader()); - - interceptor.onConstruct(obj, allArguments, dynamicFieldSetter, dynamicFieldGetter); - zuper.call(allArguments); - } catch (Throwable t) { - logger.error("ConstructorInter failure.", t); - } - - } -} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/EnhancedInstanceFieldGetter.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/EnhancedInstanceFieldGetter.java deleted file mode 100644 index 27332f627..000000000 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/plugin/interceptor/enhance/EnhancedInstanceFieldGetter.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.skywalking.apm.agent.core.plugin.interceptor.enhance; - -import net.bytebuddy.implementation.bind.annotation.FieldValue; -import net.bytebuddy.implementation.bind.annotation.RuntimeType; - -/** - * Get the value of dynamic added {@link ClassEnhancePluginDefine#CONTEXT_ATTR_NAME} field - * - * @author wusheng - */ -public class EnhancedInstanceFieldGetter { - @RuntimeType - public Object intercept( - @FieldValue(ClassEnhancePluginDefine.CONTEXT_ATTR_NAME) Object fieldValue) { - return fieldValue; - } -} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java index f9ed5a3ec..f92a91d0f 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/remote/GRPCChannelManager.java @@ -27,7 +27,9 @@ public class GRPCChannelManager implements BootService, Runnable { synchronized (this) { if (channelManagerThread == null || !channelManagerThread.isAlive()) { if (managedChannel == null || managedChannel.isTerminated() || managedChannel.isShutdown()) { - managedChannel.shutdownNow(); + if (managedChannel != null) { + managedChannel.shutdownNow(); + } Thread channelManagerThread = new Thread(this, "ChannelManagerThread"); channelManagerThread.setDaemon(true); channelManagerThread.start(); diff --git a/apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java b/apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java index bd2dbce9d..e51cf9f8e 100644 --- a/apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java +++ b/apm-sniffer/apm-agent/src/main/java/org/skywalking/apm/agent/SkyWalkingAgent.java @@ -1,5 +1,6 @@ package org.skywalking.apm.agent; +import java.lang.instrument.Instrumentation; import java.util.List; import net.bytebuddy.agent.builder.AgentBuilder; import net.bytebuddy.description.NamedElement; @@ -7,7 +8,6 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.utility.JavaModule; -import org.skywalking.apm.agent.junction.SkyWalkingEnhanceMatcher; import org.skywalking.apm.agent.core.boot.ServiceManager; import org.skywalking.apm.agent.core.conf.SnifferConfigInitializer; import org.skywalking.apm.agent.core.logging.EasyLogResolver; @@ -15,11 +15,10 @@ import org.skywalking.apm.agent.core.plugin.AbstractClassEnhancePluginDefine; import org.skywalking.apm.agent.core.plugin.PluginBootstrap; import org.skywalking.apm.agent.core.plugin.PluginException; import org.skywalking.apm.agent.core.plugin.PluginFinder; +import org.skywalking.apm.agent.junction.SkyWalkingEnhanceMatcher; import org.skywalking.apm.logging.ILog; import org.skywalking.apm.logging.LogManager; -import java.lang.instrument.Instrumentation; - import static net.bytebuddy.matcher.ElementMatchers.isInterface; import static net.bytebuddy.matcher.ElementMatchers.not; @@ -76,7 +75,9 @@ public class SkyWalkingAgent { @Override public void onTransformation(TypeDescription typeDescription, ClassLoader classLoader, JavaModule module, boolean loaded, DynamicType dynamicType) { - + if (logger.isDebugEnable()) { + logger.debug("On Transformation class {}.", typeDescription.getName()); + } } @Override @@ -92,9 +93,6 @@ public class SkyWalkingAgent { @Override public void onComplete(String typeName, ClassLoader classLoader, JavaModule module, boolean loaded) { - if(logger.isDebugEnable()){ - logger.debug("Enhance class {} completed.", typeName); - } } }).installOn(instrumentation); }