真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷

這篇文章給大家介紹Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

十多年的霍林郭勒網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整霍林郭勒建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“霍林郭勒網(wǎng)站設(shè)計(jì)”,“霍林郭勒網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

BTrace是什么

BTrace is a safe, dynamic tracing tool for the Java platform. BTrace can be used to dynamically trace a running Java program (similar to DTrace for OpenSolaris applications and OS). BTrace dynamically instruments the classes of the target application to inject tracing code (“bytecode tracing”). Tracing code is expressed in Java programming language. There is also integration with DTrace for the OpenSolaris platform. admins were sundararajana and Jaroslov Bachorik

概括起來(lái) BTrace 是一個(gè)動(dòng)態(tài)的問(wèn)題分析和診斷工具,類(lèi)似于Solaris上的DTrace,基于JDK 提供的 Instrument特性,在JVM 運(yùn)行過(guò)程中進(jìn)行類(lèi)的 retransform ,從而使定義的Trace script 生效。

比如分析如下的系統(tǒng)問(wèn)題:

  • 應(yīng)用中有大量的Socket連接,導(dǎo)致運(yùn)行過(guò)程中會(huì)產(chǎn)生Socket句柄占用過(guò)多,系統(tǒng)異常??梢灾苯臃治鰬?yīng)用代碼中打開(kāi)和關(guān)閉Socket的地方,統(tǒng)計(jì)次數(shù)。類(lèi)似可以應(yīng)用于數(shù)據(jù)庫(kù)連接等。

  • 應(yīng)用的GC日志顯示有頻繁的 System.gc()的調(diào)用??梢灾苯臃治稣{(diào)用方,打印調(diào)用Stack。

  • 線(xiàn)上應(yīng)用統(tǒng)計(jì)某個(gè)方法的調(diào)用時(shí)間

  • 線(xiàn)上應(yīng)用查看方法調(diào)用的返回值

更多可以參考UserGuide,或者參考下載包中包含的sample

基本原理

在BTrace中有探針(Probe)的一個(gè)概念,所有定義的OnMethod都可以看成一個(gè)探針,和現(xiàn)在APM工具里的概念類(lèi)似,在特定的節(jié)點(diǎn)進(jìn)行觸發(fā)。臨時(shí)新增的Trace 腳本,通過(guò)JVM TI 提供和Instrument動(dòng)態(tài)增加到目標(biāo)class中。相當(dāng)于新增了一個(gè)trace方法,然后在源方法中進(jìn)行trace方法的調(diào)用。

我們前面的文章曾經(jīng)寫(xiě)過(guò)關(guān)于 class 的 HotSwap 實(shí)現(xiàn),當(dāng)時(shí)里面的幾個(gè)圖都是分析的 BTrace 對(duì)于目標(biāo) class 增加了探針之后的具體表現(xiàn)形式。(類(lèi)加載器與類(lèi)的熱替換(Hotswap)

而整體的 Instrument 也是通過(guò) JVMTI來(lái)實(shí)現(xiàn)類(lèi)的 Retransform,這個(gè)在前面分析Debug的實(shí)現(xiàn)原理時(shí)也曾寫(xiě)過(guò):當(dāng)我們談Debug時(shí),我們?cè)谡勈裁?Debug實(shí)現(xiàn)原理)

使用

具體到BTrace的使用,其實(shí)非常容易,我們介紹常用的兩種方式:

1. 下載  https://github.com/btraceio/btrace/releases,在這里下載,然后編寫(xiě) Trace 腳本,在命令行中執(zhí)行 btrace PID script.java 即可。

2. 直接在 JvisualVM 中添加 BTrace 插件, 然后分析對(duì)應(yīng)的應(yīng)用時(shí),直接右擊進(jìn)程,選擇 Trace application,即可打開(kāi)一個(gè)類(lèi)似于 IDE 的窗口,在其中編寫(xiě) Trace 腳本,執(zhí)行 start即可。

Trace 腳本的編寫(xiě)也比較容易,在任意的方法中通過(guò) OnMethod 聲明探針,BTrace 中稱(chēng)之為 Probe,然后指定要 trace 的class 名稱(chēng) 和方法名稱(chēng), 在方法體中直接編寫(xiě)對(duì)應(yīng)的Probe被觸發(fā)時(shí)要執(zhí)行的邏輯。 更詳細(xì)的內(nèi)容可以參考下 UserGuide 或者附帶的幾個(gè) sample。

比較而言,第二種使用更方便,但缺點(diǎn)是不支持遠(yuǎn)程 Trace。

例子

比如觀(guān)察發(fā)現(xiàn)應(yīng)用中有些時(shí)候會(huì)執(zhí)行 System.gc()。 為了排查是否是在應(yīng)用中直接調(diào)用,就可以通過(guò) BTrace

Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷

對(duì)于數(shù)據(jù)庫(kù)連接的獲取等,可以直接判斷其 getConnection 的調(diào)用

Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷

自己懶的寫(xiě)了,這幾個(gè)是在gist 上找了幾個(gè)截的圖,方法了解其語(yǔ)法以及一些常用的用法。其中對(duì)于一些對(duì)象的構(gòu)造方法調(diào)用等,可以直接指定方法為

甚至對(duì)于一個(gè)方法的執(zhí)行時(shí)間,對(duì)于代碼編寫(xiě)時(shí)沒(méi)有添加Log時(shí)也不需要再增加,可以直接通過(guò)腳本進(jìn)行,在方法退出時(shí)打印消耗時(shí)間:

Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷

此外,對(duì)于方法體內(nèi)傳入的參數(shù),調(diào)用鏈的打印等都可以方便的進(jìn)行。

也可以獲取一個(gè)類(lèi)的屬性值,以及類(lèi)內(nèi)某個(gè)方法對(duì)于另外指定方法的調(diào)用。

而對(duì)于以上這些操作,最關(guān)鍵的是不需要停止應(yīng)用,可以動(dòng)態(tài)的進(jìn)行修改,從而實(shí)現(xiàn)應(yīng)用的分析診斷。

當(dāng)然,對(duì)于執(zhí)行完 Trace腳本后,這些內(nèi)容會(huì)仍然保留在已加載的 class 內(nèi),直到應(yīng)用重啟或者 class 再次 transform。

關(guān)于Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁(yè)標(biāo)題:Java中怎么利用BTrace實(shí)現(xiàn)問(wèn)題診斷
當(dāng)前網(wǎng)址:http://weahome.cn/article/jjhopj.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部