所有的代碼分析基於pinpoint 1.6.2
常用配置
-
profiler.sampling.enable=true
是否進行採樣,true表示開啓採樣,如果關閉採樣,將不進行trace
-
profiler.sampling.rate=100
採樣率:表示每profiler.sampling.rate次請求,進行一次trace
例如,100表示1/100,1表示每次請求都trace
-
profiler.io.buffering.enable=true
是否開啓span緩衝,默認開啓(即trace的span先緩衝再發送,減輕發送的壓力)
-
profiler.io.buffering.buffersize=20
緩衝的span個數
-
profiler.xx.xx=true
是否開啓該插件的trace,例如tomcat:
profiler.tomcat.enable=true
通信相關
-
profiler.collector.ip=trace.tv.sohuno.com
agent與collector通信的ip地址,不能是ip列表,只能是單個ip或者域名
-
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
-
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
-
agent info發送(TCP協議)
profiler.collector.tcp.ip=${profiler.collector.ip} profiler.collector.tcp.port=9994 # 發送間隔,單位毫秒,默認每5分鐘發送一次 profiler.agentInfo.send.retry.interval=300000
-
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自身相關
-
profiler.interceptorregistry.size=8192
最大支持多少個攔截器註冊,默認8192個
所謂攔截器註冊,是指plugin裏註冊的攔截器,以jetty插件的代碼爲例:
handleMethodEditorBuilder.addInterceptor("com.navercorp.pinpoint.plugin.jetty.interceptor.ServerHandleInterceptor", va(config.getJettyExcludeUrlFilter()));
-
profiler.callstack.max.depth=64
一個span中,持有的callstack的最大深度,span是一系列本地方法的調用,也就是調用的最大深度。
這塊相關的內容可以參考
2.agent追蹤的trace結束
部分。 -
profiler.interceptor.exception.propagate=false
攔截器遇到異常後,是否需要拋出,默認不拋出,即應用程序不會接到攔截器拋出的異常,但是日誌裏會進行記錄。
-
profiler.instrument.engine=ASM
字節碼注入引擎,默認爲ASM,還支持JavaAssist
-
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
-
profiler.entrypoint=
用戶自定義trace的方法,逗號分隔列表,例如:
foo.bar.MyClass.myMethod, foo.bar.MyClass.anotherMethod
各個插件自身的配置
各個插件處理可以是否禁用外,還有一些額外的配置可以使用,這裏不再一一列舉
未使用的配置
可能是由於歷史原因,有一些配置並沒有看到使用的地方,在這裏列出來
-
profiler.enable=true
是否開啓trace
-
profiler.jvm.collect.interval=1000
-
profiler.applicationservertype=TOMCAT
servertype會自動檢測,不用指定
-
profiler.type.detect.order=
servertype檢測順序,不用指定
-
profiler.plugin.disable
禁止插件的完成類名,一般每個插件單獨設置,這裏不使用
-
profiler.include=
用戶指定要trace哪幾個類,已廢棄