Java調優—Btrace監控Java執行緒/方法執行引數、執行時間(Windows)
Windows環境下jvisualvm+Btrace 監控Java程式
一、背景
在專案開發中,想要監控程式,我們可以本地啟動專案,然後斷點除錯,可是對於線上的專案需要監控或者除錯的時候,就沒什麼辦法,目前有以下幾種監控方式:
1、通過日誌監控。通過程式碼中寫的日誌記錄,來跟蹤程式的執行,但是無法監控程式執行時間
2、通過JConsole跟蹤和監控程式:參考
3、利用jstack分析執行緒
4、通過Btrace來跟蹤和監控程式
今天我們要說的,就是第三種,利用Btrace來監控Java程式的執行
二、安裝與執行(Windows)
在windows環境下,可以直接利用jdk自帶的jvisualvm工具來 安裝Btrace外掛,具體操作如下:
1、進入jdk安裝目錄,進入bin目錄,找到jvisualvm.exe ,開啟之後,在工具欄——>工具——>外掛 ,搜尋外掛BTrace Workbench,然後安裝
2、啟動你程式所在的Tomcat,在jvisualvm.exe 視窗你會發現有個Tomcat的選單圖示,右鍵——>選擇Trace application,具體如下圖:
3、如果想監控程式執行時間,複製如下程式碼到Btrace窗體內:
package my.app.btrace;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
@BTrace
public class TraceProductManageImpl {
@OnMethod(clazz = "/com.odianyun.+business.+/", method = "/.+/", location = @Location(Kind.RETURN))
public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,@Duration long time){
long durationTime = time/1000000;
if(durationTime > 0){
String output = strcat(name,".");
output = strcat(output,method);
output = strcat(output,"#");
output = strcat(output,str(probeLine()));
output = strcat(output,">>");
output = strcat(output,str(durationTime));
output = strcat(output,">>ThreadId:");
output = strcat(output,str(threadId(currentThread())));
println(output);
}
}
}
具體操作如下圖:
然後你就能監控你程式方法的執行時間(這裡監控的是你填寫package目錄下的每個class下面 的方法)
三、Linux下安裝Btrace
1、目前最新版下載地址是:點選開啟連結
2、選擇不同版本下載
3、Linux安裝,需要設定BTRACE_HOME環境變數和在PATH中新增bin目錄,並新增bin目錄下檔案的可執行許可權。
4、把上述程式碼,寫到一個檔案,例如:DEMO.java 是用java寫的指令碼,上傳到伺服器上即可執行。 btrace 4552 DEMO.java >> /data/btrace/DEMO.txt
四、補充
如果想監控程式的引數什麼的,換成以下程式碼即可:
ackage my.app.btrace;
import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.size;
import static com.sun.btrace.BTraceUtils.str;
import static com.sun.btrace.BTraceUtils.strcat;
import java.util.List;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.ProbeClassName;
import com.sun.btrace.annotations.ProbeMethodName;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
@BTrace
/**
* 獲取程式引數
* @author Michael
*/
public class TraceProductManageParam {
@OnMethod(clazz = "com.odianyun.frontier.guide.business.read.manage.impl.PromotionManageImpl", method = "getMerchantProductCurrentPromotionPriceBatch", location = @Location(Kind.RETURN))
public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,@Self Object self, List<Long> mpIds, Long companyId, @Return List<?> ret){
String output = strcat(name,".");
output = strcat(output,method);
output = strcat(output,">inputItems:");
output = strcat(output, str(mpIds));
output = strcat(output,">outputSize:");
output = strcat(output, str(size(ret)));
println(output);
}
}
相關文章
- Java利用執行緒工廠監控執行緒池Java執行緒
- java執行緒執行緒休眠,sleep方法Java執行緒
- 編碼:執行緒執行監控執行緒
- weblogic執行緒池引數調優配置方法Web執行緒
- 乾貨:教你如何監控 Java 執行緒池執行狀態Java執行緒
- Java多執行緒——執行緒Java執行緒
- 正常執行時間監控
- Java多執行緒——獲取多個執行緒任務執行完的時間Java執行緒
- java中如何給多執行緒中子執行緒傳遞引數?Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- Java執行緒:執行緒中斷Java執行緒
- java多執行緒5:執行緒間的通訊Java執行緒
- Java執行緒的CPU時間片Java執行緒
- java 最大執行緒數Java執行緒
- Java之執行緒協調Java執行緒
- java效能調優記錄(執行緒阻塞)Java執行緒
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- JAMon監控SQL執行時間SQL
- Java執行緒中斷與終止執行緒執行Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒——守護執行緒Java執行緒
- Java多執行緒16:執行緒組Java執行緒
- Java多執行緒18:執行緒池Java執行緒
- java執行緒Java執行緒
- Java 執行緒池執行原理分析Java執行緒
- java多執行緒執行問題Java執行緒
- Java指定週期執行執行緒Java執行緒
- java執行緒學習5——執行緒同步之同步方法Java執行緒
- Java執行緒(篇外篇):執行緒本地變數ThreadLocalJava執行緒變數thread
- Java 多執行緒基礎(十一)執行緒優先順序和守護執行緒Java執行緒
- 【java】【多執行緒】睡眠/守護/加入/禮讓執行緒,執行緒優先順序(4)Java執行緒