舉幾個(gè)例子
1、查看最繁忙的線程,以及是否有阻塞情況發(fā)生?
場景:我想看下查看最繁忙的線程,以及是否有阻塞情況發(fā)生? 常規(guī)查看線程,一般我們可以通過 top 等系統(tǒng)命令進(jìn)行查看,但是那畢竟要很多個(gè)步驟,很麻煩。
2、確認(rèn)某個(gè)類是否已被系統(tǒng)加載?
場景:我新寫了一個(gè)類或者一個(gè)方法,我想知道新寫的代碼是否被部署了?
3、如何查看一個(gè)class類的源碼信息?場景:我新修改的內(nèi)容在方法內(nèi)部,而上一個(gè)步驟只能看到方法,這時(shí)候可以反編譯看下源碼。
4、如何跟蹤某個(gè)方法的返回值、入?yún)?場景:我想看下我新加的方法在線運(yùn)行的參數(shù)和返回值?
5、如何看方法調(diào)用棧的信息?場景:我想看下某個(gè)方法的調(diào)用棧的信息?
運(yùn)行此命令之后需要即時(shí)觸發(fā)方法才會(huì)有響應(yīng)的信息打印在控制臺(tái)上。
6、找到最耗時(shí)的方法調(diào)用?
場景:testMethod這個(gè)方法入口響應(yīng)很慢,如何找到最耗時(shí)的子調(diào)用?
運(yùn)行此命令之后需要即時(shí)觸發(fā)方法才會(huì)有響應(yīng)的信息打印在控制臺(tái)上,然后一層一層看子調(diào)用。
7、如何臨時(shí)更改代碼運(yùn)行?場景:我找到了問題所在,能否線上直接修改測(cè)試,而不需要在本地改了代碼后,重新打包部署,然后重啟觀察效果?
如上,是直接更改線上代碼的方式,但是一般好像是編譯不成功的。所以,最好是本地ide編譯成 class文件后,再上傳替換為好!
總之,已經(jīng)完全不用重啟和發(fā)布了!這個(gè)功能真的很方便,比起重啟帶來的代價(jià),真的是不可比的。比如,重啟時(shí)可能導(dǎo)致負(fù)載重分配,選主等等問題,就不是你能控制的了。
8、我如何測(cè)試某個(gè)方法的性能問題?