1. 程式人生 > >線上排查工具btrace和jvm-inspector使用說明

線上排查工具btrace和jvm-inspector使用說明

btrace
=================================================================
btrace官網:https://kenai.com/projects/btrace/pages/UserGuide
下載1.2可執行包的,上傳到線上機器。

解壓後將chmod 755 btrace,將btrace設為可執行。
一個簡單的btrace指令碼(就是一個java程式碼檔案)示例:
------------------------------------------------------------
import com.sun.btrace.annotations.*;

import com.sun.btrace.AnyType;
import static com.sun.btrace.BTraceUtils.*;

@BTrace public class TraceLog4j {
    @OnMethod(clazz="/org\\.slf4j.*/",method="/error.*/")
    public static void m(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod, AnyType[] args) {
        print(probeClass);
        print(".");

        println(probeMethod);
        printArray(args);
    }
}
------------------------------------------------------------
這個指令碼的作用是:檢測到org.slf4j包下所有類的error方法呼叫時,就會打印出類名、方法名以及引數值列表。
儲存後,先找到你要trace的程序的pid。
使用命令:sudo btrace <pid> TraceLog4j.java 看輸出即可(執行前可能需要先export JAVA_HOME)。

引數註解:
@Self:指定被trace方法的this

@ProbeClassName/ProbeMethodName:被trace方法的類名和方法名
@Return 指定trace方法的返回值
@TargetInstance:指定被trace方法內部呼叫到的例項
@TargetMethodOrField:被trace方法內部呼叫到的方法 

屬性註解:
@TLS:指定變數為ThreadLocal。

關於TargetInstance和TargetMethodOrField,官方示例程式碼如下:
------------------------------------------------------------
package com.sun.btrace.samples;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace public class AllCalls2 {
    @OnMethod(clazz="/javax\\.swing\\..*/", method="/.*/",
        [email protected](value=Kind.CALL, clazz="/.*/", method="/.*/"))      
    public static void n(@Self Object self, @ProbeClassName String pcm, @ProbeMethodName String pmn,
        @TargetInstance Object instance, @TargetMethodOrField String method, String text) {
        println(Strings.strcat("Context: ", Strings.strcat(pcm, Strings.strcat("#", pmn))));
        print(method);
        print("  ");
        println(text);
    }
}
------------------------------------------------------------
這個指令碼會列印javax.swing包內所有方法中間接呼叫的方法。

取self物件的特定field的值,可以使用:str(get(field("ClassName", "fieldName"), self))

注意:btrace為了保證JVM的安全和穩定,限定了指令碼中只能呼叫BTraceUtils提供的方法,方法列表在這裡:
https://btrace.kenai.com/javadoc/1.2/com/sun/btrace/BTraceUtils.html

這裡有幾個比較不錯的例子:http://inter12.iteye.com/blog/1759882


jvm-inspector
=================================================================
淘寶自己開發的工具,程式就一個jar包,啟動非常簡單:
java -Xbootclasspath/a:/opt/taobao/java/lib/tools.jar -jar jvm-inspect-2.0.1.jar <pid>
執行後會出現一個互動式的介面。

classesdump:可以dump出一個類的所有類載入器
trace:跟蹤方法呼叫,如:trace com.taobao.tae.grid.servlet.TaePhpServlet.render()
不過不太清楚怎麼使用brace的類似get(field..)取物件欄位值的方法。

相關推薦

線上排查工具btracejvm-inspector使用說明

btrace=================================================================btrace官網:https://kenai.com/projects/btrace/pages/UserGuide下載1.2可執行

利用jmapMAT等工具查看JVM運行時堆內存

exe 工具 劃分 bubuko 進制 targe 第一個 進程 ips jmap JDK自帶了一些工具可以幫助我們查看JVM運行的堆內存情況,常用的是jmap命令 jmap -heap <pid>  打印堆的使用情況 那麽,從這個輸出中我們也可以

jvm工具介紹效能調優

jvm工具 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/ Jps Jstat Jinfo Jmap Jhat Jstack JConsole Jps (Java p

史上最全的高可用服務系統線上問題排查工具單(一)

上一篇文章保證高可用Java服務化系統高效執行的必備工具箱介紹了筆者在網際網路公司裡線上應急和技術攻關過程中積累的應用層指令碼和Java虛擬機器命令,這些指令碼和命令在發現問題和定位問題的過程中起到關鍵作用,然而,經常會遇到一些深層次的問題,僅僅通過應用層和JVM虛擬機器層的資訊無法定位問題和解決問題,這時需

linux程序執行緒排查 · 記一次JVM CPU高負載的排查辦法

前言通過本文,你將學會:1、linux上程序及程序中執行緒排查的基本方法,如檢視程序中的執行緒數此文中的執行緒一般指輕量級程序。檢視所有程序資訊 top -H 加上-H這個選項啟動top,top一行顯示一個執行緒(指的是(輕量級)程序? )。否則,它一行顯示一個程序。先輸入

記憶體問題的排查工具方法– Clang的AddressSanitizer

AddressSanitizer是clang中的一個記憶體錯誤檢測器,它可以檢測到以下問題: Out-of-bounds accesses to heap, stack and globalsUse-after-freeUse-after-return (to some extent)Double-free

(8)利用JConsole工具監控java程式記憶體JVM

一.找到java應用程式對應的程序PI 部署的應用伺服器為tomcat6.028 啟動tomcat伺服器後,工作管理員裡可以看到多了java.exe程序,如圖 PS:這裡啟動了多個其他程式       2.查詢測試應用程式對應的程序PID號(根據埠號查詢)  

開發工具系列(一):Btrace——線上Debug工具

Btrace Btrace用於除錯正在執行的系統,並且在除錯時不會暫停系統。特別適用於跟蹤線上問題。你可以實時監控一個系統中任何一個方法的呼叫,你可以知道這些方法的引數、返回值是什麼,還可以知道方法呼叫消耗了多少時間。 Btrace不需要安裝,只要下載一個包,解壓即可。

線上除錯工具 jvm-sandbox使用

jvm-sandbox使用 1 快速安裝 1.1 下載解壓 # 下載最新版本的JVM-SANDBOX wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip # 解壓 unzip sa

幾個小步驟教你線上使用浪潮webblos做raid---簡單了!

幾個小步驟教你線上使用浪潮webblos做raid 幾個小步驟教你線上使用浪潮webblos做raid 簡單明了教你線上使用浪潮webblos做raid,在這裏就不啰嗦了!直接進入正題---圖片表達!選擇configureation v….選擇新建 (new)選擇手動 (M

代碼檢查工具jshintcsslint

sub ever 發生器 conf win 多行 oval rul 定義 前面的話   Douglas Crockford大神根據自己的理念用JavaScript寫了一個JavaScript代碼規範檢查工具,這就是JSLint。後來非常流行,也的確幫助了廣大的JavaSc

[Linux]非常方便的上傳下載文件工具rzsz

ctrl+ mkdir -p too 方法 tar blank roo ont 工具 ?? linux上非常方便的上傳下載文件工具rz和sz (本文適合linux入門的朋友) [一般用於SecureCRT ssh中使用] █ 法一:直接用yum安裝lrzsz(推薦) y

Linux網絡工具lsofnetstat

nod 使用 指定 設備管理 內容 路由 協議類型 linu device lsof全名為list opened files,即列舉系統中已經被打開的文件,基本使用如下: (1) 查看/etc/passwd使用情況 lsof /etc/password (2) 查看監聽的s

JVM的基本結構JVM內存結構

字符 函數 初始 修改 mach html 空間 使用 mage JVM的基本結構和JVM的內存結構 這裏介紹一下JVM在啟動後,作為操作系統的一個進程的基本結構,以及從操作系統角度看,JVM如何管理它從操作系統裏申請來的內存的,也就是JVM的內存結構或者叫JVM內存

Redis監控工具,命令調優

ret 數據 處理 util backlog rtu ado fec disable Redis監控工具,命令和調優 1.圖形化監控 由於要對Redis做性能測試,發現了GitHub上有個python寫的RedisLive監控工具評價不錯。結果鼓搗了

linux上很方便的上傳下載文件工具rzsz使用介紹

目錄 nsf .com color transfer 登陸 lin 編譯 令行 一般來說,linux服務器大多是通過ssh客戶端來進行遠程的登陸和管理的,使用ssh登陸linux主機以後,如何能夠快速的和本地機器進行文件的交互呢,也就是上傳和下載文件到服務器和本地; 與ss

智能指針前置聲之間的小問題

2.4 anti c++工程 智能 test 無法 sizeof pri inline 對比Go等其他語言的工程,C++工程讓人痛苦的一件事情就是當工程稍微龐大一點,編譯時間就蹭蹭蹭往上爬。一般來說看過Effective C++這本書或者其他類似書籍的人都知道要解決編譯時長

java分頁的實現(後臺工具前臺jsp頁面)

cal else static pre cti per servle reac tint 1、首先,新建一個類Page.java 1 public class Page implements Serializable { 2 private static fi

[轉] [Java] 知乎下巴第5集:使用HttpClient工具寬度爬蟲

fan param 出隊 page connect ise dex ide xtra 原文地址:http://blog.csdn.net/pleasecallmewhy/article/details/18010015 下載地址:https://code.csdn.net

Java中的JDK,JREJVM之間的區別

run 編譯 java 發布 開發 特性 底層 應用程序 解釋 JDK(Java Development Kit)是針對Java開發員的產品,是整個Java的核心,包括了Java運行環境JRE、Java工具和Java基礎類庫。Java Runtime Environment