欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java軟件生產(chǎn)監(jiān)控工具Btrace使用方法詳解

 更新時(shí)間:2020年07月06日 10:29:14   投稿:yaominghui  
這篇文章主要介紹了Java軟件生產(chǎn)監(jiān)控工具Btrace使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Btrace

BTrace是sun公司推出的一款Java 動(dòng)態(tài)、安全追蹤(監(jiān)控)工具,可以在不用重啟的情況下監(jiān)控系統(tǒng)運(yùn)行情況,方便的獲取程序運(yùn)行時(shí)的數(shù)據(jù)信息,如方法參數(shù)、返回值、全局變量和堆棧信息等,并且做到最少的侵入,占用最少的系統(tǒng)資源。

項(xiàng)目地址:Btrace

用戶指南:UserGuide

Btrace使用

在Release頁面里下載最新Zip版,解壓就能用

tar -zxvf btrace-bin-1.3.8.3.tgz
export JAVA_HOME=/opt/taobao/java
export PATH=$JAVA_HOME/bin:$PATH

./bin/btrace -cp /home/admin/projectname/target/projectname/BOOT-INF/classes 2016 SlowCall.java
./bin/btrace -cp /home/admin/projectname/target/projectname.war/WEB-INF/classes:/home/admin/projectname/target/projectname.war/WEB-INF/lib/projectname-1.0-SNAPSHOT.jar 71419 BtraceTest.java > NT12.txt

由于Btrace會(huì)把腳本邏輯直接侵入到運(yùn)行的代碼中,所以在使用上做很多限制:

1、不能創(chuàng)建對(duì)象

2、不能使用數(shù)組

3、不能拋出或捕獲異常

4、不能使用循環(huán)

5、不能使用synchronized關(guān)鍵字

6、屬性和方法必須使用static修飾

根據(jù)官方聲明,不恰當(dāng)?shù)氖褂肂Trace可能導(dǎo)致JVM崩潰,如在BTrace腳本使用錯(cuò)誤的class文件,所以在上生產(chǎn)環(huán)境之前,務(wù)必在本地充分的驗(yàn)證腳本的正確性。

Btrace可以做什么?

1、接口性能變慢,分析每個(gè)方法的耗時(shí)情況;

2、當(dāng)在Map中插入大量數(shù)據(jù),分析其擴(kuò)容情況;

3、分析哪個(gè)方法調(diào)用了System.gc(),調(diào)用棧如何;

4、執(zhí)行某個(gè)方法拋出異常時(shí),分析運(yùn)行時(shí)參數(shù);

5、....

Btrace第一個(gè)例子

package com.metty.rpc.common;
import java.util.Random;

public class BtraceCase {
  public static Random random = new Random();
  public int size;

  public static void main(String[] args) throws Exception {
    new BtraceCase().run();
  }
  
  public void run() throws Exception {
    while (true) {
      add(random.nextInt(10), random.nextInt(10));
    }
  }

  public int add(int a, int b) throws Exception {
    Thread.sleep(random.nextInt(10) * 100);
    return a + b;
  }
}

執(zhí)行add方法時(shí),對(duì)傳入?yún)?shù)、返回值以及執(zhí)行耗時(shí)進(jìn)行分析,btrace腳本:

通過jps命令獲取pid為8454

執(zhí)行btrace 8454 Debug.java實(shí)現(xiàn)對(duì)運(yùn)行代碼的監(jiān)控,輸出結(jié)果如下:

可以發(fā)現(xiàn),Btrace可以獲取每次執(zhí)行add方法時(shí)的數(shù)據(jù),當(dāng)然Btrace能做的遠(yuǎn)遠(yuǎn)不止這些,比如獲取當(dāng)前jvm堆使用情況、當(dāng)前線程的執(zhí)行棧等等。

參數(shù)說明

@OnMethod

Btrace使用@OnMethod注解定義需要分析的方法入口

在@OnMethod注解中,需要指定class、method以及l(fā)ocation等,class表明需要監(jiān)控的類,method表明需要監(jiān)控的方法,指定方式如下:

1、使用全限定名:clazz="com.metty.rpc.common.BtraceCase", method="add"

2、使用正則表達(dá)式:clazz="/javax\\.swing\\..*/", method="/.*/"

3、使用接口:clazz="+com.ctrip.demo.Filter", method="doFilter"

4、使用注解:clazz="@javax.jws.WebService", method=""@javax.jws.WebMethod"

5、如果需要分析構(gòu)造方法,需要指定method="<init>"

@Location

定義Btrace對(duì)方法的攔截位置,通過@Location注解指定,默認(rèn)為Kind.ENTRY

1、Kind.ENTRY:在進(jìn)入方法時(shí),調(diào)用Btrace腳本

2、Kind.RETURN:方法執(zhí)行完時(shí),調(diào)用Btrace腳本,只有把攔截位置定義為Kind.RETURN,才能獲取方法的返回結(jié)果@Return和執(zhí)行時(shí)間@Duration

3、Kind.CALL:分析方法中調(diào)用其它方法的執(zhí)行情況,比如在execute方法中,想獲取add方法的執(zhí)行耗時(shí),必須把where設(shè)置成Where.AFTER

4、Kind.LINE:通過設(shè)置line,可以監(jiān)控代碼是否執(zhí)行到指定的位置

5、Kind.ERROR, Kind.THROW, Kind.CATCH

用于對(duì)某些異常情況的跟蹤,包括異常拋出,異常被捕獲,異常未捕獲被拋出方法之外

如何使用Btrace定位問題
1、找出所有耗時(shí)超過1ms的過濾器Filter

由于@Dutation返回的時(shí)間是納秒級(jí)別,需要進(jìn)行轉(zhuǎn)換,如果定位一個(gè)Filter性能變慢,接著使用@Location(Kind.CALL)進(jìn)行更細(xì)粒度的分析。

2、分析哪個(gè)方法調(diào)用了System.gc(),調(diào)用棧如何?

通過查看調(diào)用棧,可以很清楚的發(fā)現(xiàn)哪個(gè)類哪個(gè)方法調(diào)用了System.gc()

3、統(tǒng)計(jì)方法的調(diào)用次數(shù),且每隔1分鐘打印調(diào)用次數(shù)

Btrace的@OnTimer注解可以實(shí)現(xiàn)定時(shí)執(zhí)行腳本中的一個(gè)方法

4、方法執(zhí)行時(shí),查看對(duì)象的實(shí)例屬性值

通過反射機(jī)制,可以很方法的得到當(dāng)前實(shí)例的屬性值

總結(jié)

Btrace能做的事情太多,但使用之前切記檢查腳本的可行性,一旦Btrace腳本侵入到系統(tǒng)中,只有通過重啟才能恢復(fù)。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring aop+反射實(shí)現(xiàn)電話號(hào)加密

    Spring aop+反射實(shí)現(xiàn)電話號(hào)加密

    線上項(xiàng)目涉及大量查詢接口中,存在電話號(hào)明文展示不合規(guī)的問題。如果對(duì)每個(gè)接口返回結(jié)果中電話號(hào)相關(guān)字段修改相關(guān)代碼邏輯,則工作量較大花費(fèi)時(shí)間多。因此設(shè)計(jì)電話號(hào)加密注解,減少工作量。
    2021-06-06
  • 基于SpringMVC攔截器實(shí)現(xiàn)接口耗時(shí)監(jiān)控功能

    基于SpringMVC攔截器實(shí)現(xiàn)接口耗時(shí)監(jiān)控功能

    本文呢主要介紹了基于SpringMVC攔截器實(shí)現(xiàn)的接口耗時(shí)監(jiān)控功能,統(tǒng)計(jì)接口的耗時(shí)情況屬于一個(gè)可以復(fù)用的功能點(diǎn),因此這里直接使用 SpringMVC的HandlerInterceptor攔截器來實(shí)現(xiàn),需要的朋友可以參考下
    2024-02-02
  • JAVA注解代碼詳解一篇就夠了

    JAVA注解代碼詳解一篇就夠了

    這篇文章主要介紹了Java注解詳細(xì)介紹,本文講解了Java注解是什么、Java注解基礎(chǔ)知識(shí)、Java注解類型、定義Java注解類型的注意事項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • GraalVM系列Native?Image?Basics靜態(tài)分析

    GraalVM系列Native?Image?Basics靜態(tài)分析

    這篇文章主要為大家介紹了GraalVM系列Native?Image?Basics靜態(tài)分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java線程池使用場景及一些建議

    java線程池使用場景及一些建議

    本文主要介紹了java線程池使用場景及一些建議,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    詳解SpringCloud新一代網(wǎng)關(guān)Gateway

    SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式
    2021-06-06
  • Java詳解實(shí)現(xiàn)ATM機(jī)模擬系統(tǒng)

    Java詳解實(shí)現(xiàn)ATM機(jī)模擬系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)控制臺(tái)版本的ATM銀行管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 關(guān)于任務(wù)調(diào)度框架quartz使用(異常處理,解決恢復(fù)后多次調(diào)度處理)

    關(guān)于任務(wù)調(diào)度框架quartz使用(異常處理,解決恢復(fù)后多次調(diào)度處理)

    這篇文章主要介紹了關(guān)于任務(wù)調(diào)度框架quartz使用(異常處理,解決恢復(fù)后多次調(diào)度處理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • JAVA設(shè)計(jì)模式之訪問者模式原理與用法詳解

    JAVA設(shè)計(jì)模式之訪問者模式原理與用法詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之訪問者模式,簡單說明了訪問者模式的原理,并結(jié)合實(shí)例分析了java訪問者模式的定義與用法,需要的朋友可以參考下
    2017-08-08
  • Java探索之string字符串的應(yīng)用代碼示例

    Java探索之string字符串的應(yīng)用代碼示例

    這篇文章主要介紹了Java探索之string字符串的應(yīng)用代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10

最新評(píng)論