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哪幾個類,已廢棄

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