4.agent配置详解

所有的代码分析基于pinpoint 1.6.2

常用配置

  1. profiler.sampling.enable=true

    是否进行采样,true表示开启采样,如果关闭采样,将不进行trace

  2. profiler.sampling.rate=100

    采样率:表示每profiler.sampling.rate次请求,进行一次trace

    例如,100表示1/100,1表示每次请求都trace

  3. profiler.io.buffering.enable=true

    是否开启span缓冲,默认开启(即trace的span先缓冲再发送,减轻发送的压力)

  4. profiler.io.buffering.buffersize=20

    缓冲的span个数

  5. profiler.xx.xx=true

    是否开启该插件的trace,例如tomcat:

    profiler.tomcat.enable=true

通信相关

  1. profiler.collector.ip=trace.tv.sohuno.com

    agent与collector通信的ip地址,不能是ip列表,只能是单个ip或者域名

  2. span发送(UDP协议)

    profiler.collector.span.ip=${profiler.collector.ip}
    profiler.collector.span.port=9996
    
    # 下面这些选项在3.agent通信里说过,这里不再解释
    profiler.spandatasender.write.queue.size=5120
    #profiler.spandatasender.socket.sendbuffersize=1048576
    #profiler.spandatasender.socket.timeout=3000
    profiler.spandatasender.chunk.size=16384
    profiler.spandatasender.socket.type=OIO
    
  3. agent stat发送(UDP协议)

    profiler.collector.stat.ip=${profiler.collector.ip}
    profiler.collector.stat.port=9995
    
    # 下面这些选项与spandatasender的类似,这里不再解释
    profiler.statdatasender.write.queue.size=5120
    #profiler.statdatasender.socket.sendbuffersize=1048576
    #profiler.statdatasender.socket.timeout=3000
    profiler.statdatasender.chunk.size=16384
    profiler.statdatasender.socket.type=OIO
    
  4. agent info发送(TCP协议)

    profiler.collector.tcp.ip=${profiler.collector.ip}
    profiler.collector.tcp.port=9994
    
    # 发送间隔,单位毫秒,默认每5分钟发送一次
    profiler.agentInfo.send.retry.interval=300000
    
  5. agent tcp相关配置

    # agent是否支持接受command
    profiler.tcpdatasender.command.accept.enable=true
    # agent是否支持活跃线程command
    profiler.tcpdatasender.command.activethread.enable=true
    # agent是否支持活跃线程数量command(dashboard里选择实时监控,活跃线程数展示)
    profiler.tcpdatasender.command.activethread.count.enable=true
    # agent是否支持线程dump command
    profiler.tcpdatasender.command.activethread.threaddump.enable=false
    # agent是否支持活跃轻量线程command
    profiler.tcpdatasender.command.activethread.threadlightdump.enable=true
    

    关于profiler.tcpdatasender.command.activethread.enable:它是总开关,详见如下代码

    public ActiveThreadService(ProfilerConfig profilerConfig, ActiveTraceRepository activeTraceRepository) {
        serviceList = new ArrayList<ProfilerCommandService>();
        if (!profilerConfig.isTcpDataSenderCommandActiveThreadEnable()) {
            return;
        }
        if (profilerConfig.isTcpDataSenderCommandActiveThreadCountEnable()) {
            serviceList.add(new ActiveThreadCountService(activeTraceRepository));
        }
        if (profilerConfig.isTcpDataSenderCommandActiveThreadLightDumpEnable()) {
            serviceList.add(new ActiveThreadLightDumpService(activeTraceRepository));
        }
        if (profilerConfig.isTcpDataSenderCommandActiveThreadDumpEnable()) {
            serviceList.add(new ActiveThreadDumpService(activeTraceRepository));
        }
    }
    

    关于活跃轻量线程的理解

    一般情况下,线程的dump需要使用MBean的方式(ThreadMXBean),如果在高负载的线上环境执行,可能会造成某些性能问题。

    pinpoint会让trace对象持有当前线程,同时会统计活跃的trace,这样通过trace即可统计出线程的状态,比如线程名,id,状态,而不用获取整个堆栈。

trace自身相关

  1. profiler.interceptorregistry.size=8192

    最大支持多少个拦截器注册,默认8192个

    所谓拦截器注册,是指plugin里注册的拦截器,以jetty插件的代码为例:

    handleMethodEditorBuilder.addInterceptor("com.navercorp.pinpoint.plugin.jetty.interceptor.ServerHandleInterceptor", va(config.getJettyExcludeUrlFilter()));
    
  2. profiler.callstack.max.depth=64

    一个span中,持有的callstack的最大深度,span是一系列本地方法的调用,也就是调用的最大深度。

    这块相关的内容可以参考2.agent追踪的trace结束部分。

  3. profiler.interceptor.exception.propagate=false

    拦截器遇到异常后,是否需要抛出,默认不抛出,即应用程序不会接到拦截器抛出的异常,但是日志里会进行记录。

  4. profiler.instrument.engine=ASM

    字节码注入引擎,默认为ASM,还支持JavaAssist

  5. java字节码dump相关

    # java bytecode dump option
    bytecode.dump.enable=false
    #bytecode.dump.classlist=com.pinpoint.user.UserService,com.pinpoint.debug.TestClass
    bytecode.dump.classlist=
    bytecode.dump.bytecode=false
    bytecode.dump.verify=false
    bytecode.dump.asm=false
    
  6. profiler.entrypoint=

    用户自定义trace的方法,逗号分隔列表,例如:

    foo.bar.MyClass.myMethod, foo.bar.MyClass.anotherMethod

各个插件自身的配置

各个插件处理可以是否禁用外,还有一些额外的配置可以使用,这里不再一一列举

未使用的配置

可能是由于历史原因,有一些配置并没有看到使用的地方,在这里列出来

  1. profiler.enable=true

    是否开启trace

  2. profiler.jvm.collect.interval=1000

  3. profiler.applicationservertype=TOMCAT

    servertype会自动检测,不用指定

  4. profiler.type.detect.order=

    servertype检测顺序,不用指定

  5. profiler.plugin.disable

    禁止插件的完成类名,一般每个插件单独设置,这里不使用

  6. profiler.include=

    用户指定要trace哪几个类,已废弃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章