1. 程式人生 > >使用Btrace進行線上系統性能分析

使用Btrace進行線上系統性能分析

最近花了點時間調查系統的效能問題,這中間用到了幾個小工具,趁熱記錄下來供以後參考: 首先為了能夠了解線上系統到底哪些方法存在效能瓶頸,得需要檢視線上每個方法的執行時間,這個如果之前開發者在程式碼中記錄了日誌,或者web系統配置了日誌攔截器記錄下每次請求的響應時間,就可以從這些日誌中分析出所有的慢介面,但是因為每個開發者習慣不同,現有系統中並不是每個方法都有這些日誌。因此就得想其它辦法,需要一個既不用重新修改程式碼並重發系統,用能獲取到線上系統每個方法實際執行情況的方案,Btrace就是用來幹這個活的工具。 Btrace的基本使用 1)下載btrace包,解壓到本地目錄,修改本機path路徑後,執行btrace命令即可啟動btrace功能。      修改path: # add btrace cmd export BTRACE_HOME=/Users/*yourusername*/Downloads/btrace-bin-1.3.8.1 export PATH=$BTRACE_HOME/bin:$PATH 2)編寫跟蹤線上執行情況的指令碼,btrace指令碼也是java程式碼,例如:  /* BTrace Script Template */ import com.sun.btrace.AnyType; import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript {     /* put your code here */     @TLS private static long startTime = 0;     @OnMethod(             clazz="com.xxx.gate.common.hessian.service.GateTargetHessianServiceImpl",             method="gateTargetInvocation"     )     public static void startExecute(){         startTime = timeNanos();     }     @OnMethod(             clazz="/com\\.xxx\\.gate\\.common\\.hessian\\.service\\.GateTargetHessianService.*/",             method="/gateTargetInvocation.*/"     )     public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) {         println(pcn);         println(pmn);         printArray(args);     }     @OnMethod(             clazz="com.xxx.gate.common.hessian.service.GateTargetHessianServiceImpl",             method="/gateTargetInvocation.*/",             [email protected](Kind.RETURN)     )     public static void endExecute(@Duration long duration, @Return AnyType ret){         println(strcat("duration(haomiao): ", str(duration/1000000)));         if(ret == null) {             print("result: null");         } else if(isPrimitive(classOf(ret))){             print("result: ");             print(ret);         } else {             print("result: ");             printFields(ret);         }     } } 這個指令碼的功能其實就是記錄了我們gate系統上所有hessian介面的呼叫資訊,包含類名、方法名、時長、返回值等。其中用到了btrace的一些註解,簡單說明如下: @OnMethod 描述本函式要監控的方法屬性,可指定clazz,method,location等屬性來制定定被監控的那些方法。 @ProbeClassName 把被監控的類名作為引數傳給當前方法 @ProbeMethodName 把被監控的方法名作為引數傳給當前方法 @Duration 把被監控方法執行的時間作為引數傳給當前方法 @Return 把被監控方法的返回值作為引數傳給當前方法 @Location 描述當前方法執行的時機,Kind.RETURN表示在方法return時執行。 其它還有更詳細的例子可以參考前面下載下來btrace包裡的userguide文件,內容不多的。 3)執行btrace指令碼,監測線上系統情況      首先找到你要監控的應用程序號,可通過jps -v檢視,比如下面是gate的,第一個14250就是程序號。 14250 Bootstrap -Djava.util.logging.config.file=/xxx/tomcat/apache-tomcat-6.0.35/conf/logging.properties -Xms2g -Xmx2g -XX:PermSize=1024m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dproduction.mode=ONLINE -Djava.rmi.server.hostname=***.**.***.*** -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8800 -Djava.endorsed.dirs=/xxx/tomcat/apache-tomcat-6.0.35_bak/endorsed -Dcatalina.base=/xxx/tomcat/apache-tomcat-6.0.35_bak -Dcatalina.home=/xxx/tomcat/apache-tomcat-6.0.35_bak -Djava.io.tmpdir=/xxx/tomcat/apache-tomcat-6.0.35_bak/temp      其次執行命令:btrace 14250 TraceGate.java > trace.log &      這裡TraceGate.java就是前面寫的btrace指令碼,完整的命令格式如下: 
btrace [-I <include-path>] [-p <port>] [-cp <classpath>] <pid> <btrace-script> [<args>]  4)收集了線上執行情況的日誌後,接下來就是分析日誌了。 根據我腳本里的格式,用grep找出那些執行時間超過1秒的方法和介面,同時也可以統計哪些介面呼叫多,哪些呼叫少,哪些介面引數特別長等資訊,這裡就不一一說明了 

相關推薦

使用Btrace進行線上系統性分析

最近花了點時間調查系統的效能問題,這中間用到了幾個小工具,趁熱記錄下來供以後參考: 首先為了能夠了解線上系統到底哪些方法存在效能瓶頸,得需要檢視線上每個方法的執行時間,這個如果之前開發者在程式碼中記錄了日誌,或者web系統配置了日誌攔截器記錄下每次請求的響應時間,就可以從這

使用Flame Graph進行系統性分析

ima cut htm -- () 還需要 通過 The i++ 關鍵詞:Flame Graph、perf、perl。 FlameGraph是由BrendanGregg開發的一款開源可視化性能分析工具,形象的成為火焰圖。 從底向上像火苗一樣逐漸變小,也反映了相互之間的包

gdb attach到已經存在的程序進行線上除錯------獲取當前棧的所有變數值

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux系統性分析命令vmstat,iostat,sar使用詳解

當系統業務出現異常,需要對系統性能進行分析時,從何下手是個問題。因為效能分析是個很系統的問題,它可能是系統軟體層面的問題,也可能是底層硬體有異常,所以這些用於分析的命令側重點也有所不同,例如:vmstat/top則偏重於觀察系統程序的CPU和記憶體使用情況,而iostat則是檢查OS與儲存之間的IO

Linux系統性分析命令

效能分析工具 一、CPU效能 # vmstat 2 3    //間隔2秒,輸出3次 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------  r  b   swpd   free   buff  ca

android系統性分析

作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態執行,但是由於硬體問題、軟體問題、網路環境等的複雜性和多變性,導致對系統的優化變得異常複雜,如何定位效能問題出在哪個方面,是效能優化的一大難題, 從系統入手,闡述由於系統軟、硬體配置不當

跨年之作:談談如何進行 Java 系統性優化

系統性能優化涉及面非常廣,涵蓋方案優化、編碼優化、併發優化、JVM 調優等諸多方面的知識。 雖然不同系統的優化策略存在差異,但從全域性來看,它們的共性仍是主要的。首先,我們可以從方案設計、編碼、併發設計、JVM 等方面去優化我們的系統;然後,可以通過一些 Linux 系統命令和工具去發現系統的效能

五大車載操作(VOS)系統優劣對比,車載系統架構分析-QNX系統性分析

車載作業系統(AutomoTIve OperaTIng System,簡稱AOS)是管理和控制車載硬體與車載軟體資源的程式系統,是直接執行在AB上的最基本的系統軟體,任何上層軟體,HMI,資料連線都必須在作業系統的支援下才能執行。   車載作業系統是使用者和車載硬體的介面,同時也是車載硬體和上層軟體的

linux系統性分析命令ps.pstree及top詳解

第四行顯示實體記憶體的使用情況,包括總的可以使用的記憶體、已用記憶體、空閒記憶體、緩衝區佔用的記憶體 Mem: 16280612k total   實體記憶體總量 879588k used   使用的實體記憶體總量 15401024k free   空閒記憶體總量 110296k buffers    用作核

HBase線上系統性優化

一、手工進行Major Compaction 實時系統最好關閉HBase的自動Major Compaction,HBase在進行Major Compaction時會合並所有的儲存檔案,整個Region都不可用。HBase預設大約每天執行一次Compaction,最好把

嵌入式:Linux jffs2,yaffs2,logfs,ubifs檔案系統性分析

    在嵌入式領域,FLASH是一種常用的儲存介質,由於其特殊的硬體結構,所以普通的檔案系統如ext2,ext3等都不適合在其上使用,於是就出現了專門針對FLASH的檔案系統,比較常用的有jffs2,yaffs2,logfs,ubifs。那麼對於這幾個檔案系統,如何選擇一

linux 系統性分析常用命令

 1.top 使用許可權:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 說明:即時顯示process的動態 d :改變顯示的更新速度,或是在交談式指令列( interactive command)

Linux 和 Android 系統性分析

作為一名Linux 或 Android 平臺的系統工程師,在開發系統新功能外,主要工作就是優化系統性能,使系統上以最優的狀態執行,但是由於硬體問題、軟體問題、網路環境等的複雜性和多變性,導致對系統的優化變得異常複雜,如何定位效能問題出在哪個方面,是效能優化的一大難題, 從系

阿里雲釋出Quick BIV3.0,人人都輕鬆進行線上資料分析

提到BI與OLAP這兩個概念,對於很多做資料庫的技術人員來說並不陌生。BI隨著時代的發展逐漸出現了新型BI和傳統型BI的劃分,從目前的發展程度來看,傳統型BI正在慢慢地衰退,由於傳統型BI存在從業門檻高,需要專業的IT人員來完成,且流程複雜,在資料視覺化方面偏弱,這些問題逐漸

碰碰車司機教你Linux下使用nmon分析系統性

碰碰車 linux 軟件包 司機 下載nmon。 根據CPU的類型選擇下載相應的版本:http://nmon.sourceforge.net/pmwiki.php?n=Site.Downloadwget http://sourceforge.net/projects/nmon/files/d

Linux系統性調優之性分析

ios 狀況 CP data- lin raid5 生成 參考 .so 1.Linux性能分析的目的1)找出系統性能瓶頸(包括硬件瓶頸和軟件瓶頸);2)提供性能優化的方案(升級硬件?改進系統系統結構?);3)達到合理的硬件和軟件配置;4)使系統資源使用達到最大的平衡。(一般

linux系統看系統性進行效能監控的幾大命令列

一般我們檢視系統性能主要是在以下幾個方面 1.使用者使用CPU情況 展現為 %user 2.系統使用CPU情況 展現為 %sys 3.wio或iowait     展現為 %iowait 程序由於等待磁碟IO而使CPU處於空閒狀態的比率 4.CPU的空閒率 5.CPU上下文的

使用xhprof進行線上PHP效能追蹤及分析

之前一直使用基於Xdebug進行PHP的效能分析,對於本地開發環境來說是夠用了,但如果是線上環境的話,xdebug消耗較大,配置也不夠靈活,因此線上環境建議使用xhprof進行PHP效能追蹤及分析。 xhprof的安裝與簡易用法

Linux運維之系統性---vmstat工具分析記憶體的瓶頸

  為了提高磁碟存取效率, Linux做了一些精心的設計, 除了對dentry進行快取(用於VFS,加速檔案路徑名到inode的轉換), 還採取了兩種主要Cache方式:Buffer Cache和Page Cache.前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫.這些Cache有效縮短了I/O系統呼叫(

Linux運維之系統性---vmstat工具分析內存的瓶頸

內存管理 但是 劃分 塊設備 發生 entry use ges span   為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用於VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Pa