一年又一年,字節(jié)跳動(dòng) Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開(kāi)始招新生啦倚喂!
【內(nèi)推碼】:GTPUVBA
【內(nèi)推鏈接】:https://job.toutiao.com/s/JRupWVj
【招生對(duì)象】:20年9月后~21年8月前 畢業(yè)的同學(xué)
【報(bào)名時(shí)間】:6.16-7.16(提前批簡(jiǎn)歷投遞只有一個(gè)月抓住機(jī)會(huì)哦C颗瘛)
【畫重點(diǎn)】:提前批和正式秋招不矛盾!面試成功,提前鎖定Offer焦读;若有失利子库,額外獲得一次面試機(jī)會(huì),正式秋招開(kāi)啟后還可再次投遞矗晃。
點(diǎn)擊進(jìn)入我的博客
3.1 JDK命令行工具
這些工具大多數(shù)是tools.jar類庫(kù)的一層薄的包裝仑嗅,它們的主要功能代碼是在tools類庫(kù)中實(shí)現(xiàn)的。還有一些甚至就是由Shell腳本直接生成的喧兄。
名稱 | 作用 |
---|---|
jps | JVM Process Status Tool,顯示指定系統(tǒng)內(nèi)所有的HotSpot虛擬機(jī)進(jìn)程 |
jstat | JVM Statistics Monitoring Tool啊楚,用于收集HotSpot虛擬機(jī)各方面的運(yùn)行數(shù)據(jù) |
jinfo | Configuration Info for Java吠冤,顯示虛擬機(jī)配置信息 |
jmap | Memory Map for Java,生成虛擬機(jī)的內(nèi)存轉(zhuǎn)儲(chǔ)快照(heapdump文件) |
jhat | JVM Heap Dump Browser恭理,用于分析heapmap文件拯辙,它會(huì)建立一個(gè)http/html服務(wù)器讓用戶可以在瀏覽器上查看分析結(jié)果 |
jstack | Stack Trace for Java,顯示虛擬機(jī)的線程快照 |
3.1.1 jps:虛擬機(jī)進(jìn)程狀況工具
作用
- 可以列出正在運(yùn)行的虛擬機(jī)進(jìn)程颜价,并顯示虛擬機(jī)執(zhí)行主類名稱(main()函數(shù)所在的類)以及這些進(jìn)程的本地虛擬機(jī)唯一ID(Local Virtual Machine Identifier)涯保。
- 對(duì)于本地虛擬機(jī)進(jìn)程來(lái)說(shuō),LVMI與操作系統(tǒng)的進(jìn)程ID(Process Identifier周伦,PID)是一致的夕春。
- jps可以通過(guò)RMI協(xié)議開(kāi)啟了RMI服務(wù)的遠(yuǎn)程虛擬機(jī)進(jìn)程狀態(tài),hostid為RMI注冊(cè)表中注冊(cè)的主機(jī)名专挪。
命令格式
jsp [options] [hostid]
主要選項(xiàng)
屬性 | 作用 |
---|---|
-p | 只輸出LVMID及志,省略主類的名稱 |
-m | 輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)傳遞給主類main()函數(shù)的參數(shù) |
-l | 輸出主類的全名,如果進(jìn)程執(zhí)行的是jar包寨腔,輸出jar路徑 |
-v | 輸出虛擬機(jī)進(jìn)程啟動(dòng)時(shí)jvm參數(shù) |
3.1.2 jstat:虛擬機(jī)統(tǒng)計(jì)信息監(jiān)視工具
作用
jstat是用于監(jiān)視虛擬機(jī)各種運(yùn)行狀態(tài)信息的命令行工具速侈。它可以顯示本地或者遠(yuǎn)程虛擬機(jī)進(jìn)程中的類裝載、內(nèi)存迫卢、垃圾回收倚搬、JIT編譯等運(yùn)行數(shù)據(jù),在沒(méi)有GUI圖形界面乾蛤,只是提供了純文本控制臺(tái)環(huán)境的服務(wù)器上每界,它將是運(yùn)行期定位虛擬機(jī)性能問(wèn)題的首選工具。
命令格式
jstat [option vmid [interval [s|ms] [count]]]
- 對(duì)于命令格式中的VMID和LVMID家卖,如果是本地虛擬機(jī)進(jìn)程盆犁,VMID和LVMID是一致的
- 如果是遠(yuǎn)程虛擬機(jī),那VMID的格式應(yīng)當(dāng)是:
[protocol:] [//] lvmid[@hostname[:port]/servername]
- 參數(shù)interval和count分別表示查詢的間隔和次數(shù)篡九,如果省略這兩個(gè)參數(shù)谐岁,說(shuō)明只查詢一次。
主要選項(xiàng)
選項(xiàng) | 作用 |
---|---|
-class | 監(jiān)視裝載類、卸載類伊佃、總空間以及類裝載所耗費(fèi)的時(shí)間 |
-gc | 監(jiān)視java堆狀況窜司,包括eden區(qū)、兩個(gè)survivor區(qū)航揉、老年代塞祈、永久代等的容量、已用空間帅涂、GC時(shí)間合計(jì)信息 |
-gccapacity | 監(jiān)視內(nèi)容與-gc基本相同议薪,但輸出主要關(guān)注java堆各個(gè)區(qū)域使用到最大、最小空間 |
-gcutil | 監(jiān)視內(nèi)容與-gc基本相同媳友,但輸出主要關(guān)注已使用控件占總空間的百分比 |
-gccause | 與-gcutil功能一樣斯议,但是會(huì)額外輸出導(dǎo)致上一次gc產(chǎn)生的原因 |
-gcnew | 監(jiān)視新生代GC情況 |
-gcnewcapacity | 監(jiān)視內(nèi)容與-gcnew基本相同,輸出主要關(guān)注使用到的最大醇锚、最小空間 |
-gcold | 監(jiān)視老年代GC情況 |
-gcoldcapacity | 監(jiān)視內(nèi)容與-gcold基本相同哼御,輸出主要關(guān)注使用到的最大、最小空間 |
-gcpermcapacity | 輸出永久代使用到的最大焊唬、最小空間 |
-compiler | 輸出JIT編譯過(guò)的方法恋昼、耗時(shí)等信息 |
-printcompilation | 輸出已經(jīng)被JIT編譯過(guò)的方法 |
示例
- S0:Survivor1區(qū)當(dāng)前使用比例
- S1:Survivor2區(qū)當(dāng)前使用比例
- E:Eden區(qū)使用比例 9.36%
- O:老年代使用比例
- M:元數(shù)據(jù)區(qū)使用比例
- CCS:壓縮使用比例
- YGC:年輕代垃圾回收次數(shù) 7次
- FGC:老年代垃圾回收次數(shù) 6次
- FGCT:老年代垃圾回收消耗時(shí)間 0.119秒
- GCT:垃圾回收消耗總時(shí)間 0.145秒
3.1.3 jinfo:Java配置信息工具
作用
jinfo的作用是實(shí)時(shí)的查看和調(diào)整虛擬機(jī)各項(xiàng)參數(shù)。
命令格式
jinfo [option] pid
主要選項(xiàng)
選項(xiàng) | 作用 |
---|---|
-flag <name> | to print the value of the named VM flag |
-flag [+/-]<name> | to enable or disable the named VM flag |
-flag <name>=<value> | to set the named VM flag to the given value |
-flags | to print VM flags |
-sysprops | to print Java system properties |
<no option> | to print both of the above |
-h / -help | to print this help message |
3.1.4 jmap:Java內(nèi)存映像工具
作用
- jmap命令用于生成堆轉(zhuǎn)儲(chǔ)快照赶促。
- 查詢finalize執(zhí)行隊(duì)列液肌、java堆和永久代的詳細(xì)信息。如空間使用率鸥滨、當(dāng)前用的是哪種收集器等矩屁。
命令格式
jmap [option] vmid
主要選項(xiàng)
選項(xiàng) | 作用 |
---|---|
-dump | 生成java堆轉(zhuǎn)儲(chǔ)快照。格式為: -dump:[live,]format=b,file=<filename>,其中l(wèi)ive子參數(shù)說(shuō)明是否只dump出存活的對(duì)象 |
-finalizerinfo | 顯示在F-Queue中等待Finalizer線程執(zhí)行finalize方法的對(duì)象爵赵。只在Linux/Solaris平臺(tái)下有效 |
-heap | 顯示java堆詳細(xì)信息吝秕,如使用哪種收集器、參數(shù)配置空幻、分代情況等烁峭,在Linux/Solaris平臺(tái)下有效 |
-jisto | 顯示堆中對(duì)象統(tǒng)計(jì)信息,包含類秕铛、實(shí)例對(duì)象约郁、合集容量 |
-permstat | 以ClassLoader為統(tǒng)計(jì)口徑顯示永久代內(nèi)存狀態(tài)。只在Linux/Solaris平臺(tái)下有效 |
-F | 當(dāng)虛擬機(jī)進(jìn)程對(duì)-dump選項(xiàng)沒(méi)有相應(yīng)時(shí)但两△廾罚可使用這個(gè)選項(xiàng)強(qiáng)制生成dump快照。只在Linux/Solaris平臺(tái)下有效 |
3.1.5 jhat:虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具
作用
- 提供jhat與jmap搭配使用谨湘,來(lái)分析dump生成的堆快照绽快。jhat內(nèi)置了一個(gè)微型的HTTP/HTML服務(wù)器芥丧,生成dump文件的分析結(jié)果后,可以在瀏覽器中查看坊罢。
- 一般不會(huì)去直接使用jhat命令來(lái)分析demp文件:原因一是一般不會(huì)在部署應(yīng)用程序的服務(wù)器上直接分析dump文件续担,一般會(huì)盡量將dump文件拷貝到其他機(jī)器上進(jìn)行分析,因?yàn)榉治龉ぷ魇且粋€(gè)耗時(shí)且消耗硬件資源的過(guò)程活孩,既然都要在其他機(jī)器上進(jìn)行物遇,就沒(méi)必要受到命令行工具的限制了;另外一個(gè)原因是jhat的分析功能相對(duì)來(lái)說(shuō)很簡(jiǎn)陋憾儒,VisualVM以及專門分析dump文件的Eclipse Memory Analyzer询兴、IBM HeapAnalyzer等工具,都能實(shí)現(xiàn)比jhat更強(qiáng)大更專業(yè)的分析功能起趾。
命令格式
jhat [ options ] heap-dump-file
3.1.6 jstack:java棧跟蹤工具
作用
- jstack命令用于生成虛擬機(jī)當(dāng)前時(shí)刻的線程快照诗舰。
- 線程快照就是當(dāng)前虛擬機(jī)內(nèi)每一條線程正在執(zhí)行的方法堆棧集合,生成線程快照的主要目的是定位線程出現(xiàn)長(zhǎng)時(shí)間停頓的原因阳掐,如線程死鎖始衅、死循環(huán)冷蚂、請(qǐng)求外部資源導(dǎo)致長(zhǎng)時(shí)間等待等缭保。
命令格式
jstack [option] vmid
主要選項(xiàng)
選項(xiàng) | 作用 |
---|---|
-F | 當(dāng)正常輸出的請(qǐng)求不被響應(yīng)時(shí),強(qiáng)制輸出線程堆棧 |
-l | 除堆棧外蝙茶,顯示關(guān)于鎖的附加信息 |
-m | 如果調(diào)用到本地方法的話艺骂,可以顯示c/c++的堆棧 |
3.2 JConsole:JDK可視化工具
JConsole ( Java Monitoring and Management Console ) 是—種基于JMX的可視化監(jiān)視管理工具。它管理部分的功能是針對(duì)JMX MBean進(jìn)行管理隆夯,由于MBean可以使用代碼钳恕、中間件服務(wù)器的管理控制臺(tái)或者所有符合JMX規(guī)范的軟件進(jìn)行訪問(wèn)。
概覽
“概述”頁(yè)簽顯示的是整個(gè)虛擬機(jī)主要運(yùn)行數(shù)據(jù)的概覽,其中包括“堆內(nèi)存使用情況”蹄衷、“線程”忧额、“類”、“CPU使用情況”4種信息的曲線圖
內(nèi)存
“內(nèi)存”頁(yè)簽相當(dāng)于可視化的jstat命令愧口,用于監(jiān)視受收集器管理的虛擬機(jī)內(nèi)存(Java堆和永久代)的變化趨勢(shì)睦番。
線程
“線程”頁(yè)簽的功能相當(dāng)于可視化的jstack命令,遇到線程停頓時(shí)可以使用這個(gè)頁(yè)簽進(jìn)行監(jiān)控分析耍属。
3.3 VisualVM:可視化工具
VisualVM(All-in-One Java Troubleshooting Tool)是到目前為止隨JDK發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序托嚣,并且可以預(yù)見(jiàn)在未來(lái)一段時(shí)間內(nèi)都是官方主力發(fā)展的虛擬機(jī)故障處理工具。官方在VisualVM的軟件說(shuō)明中寫上了“All-in-One” 的描述字樣厚骗,預(yù)示著它除了運(yùn)行監(jiān)視示启、故障處理外,還提供了很多其他方面的功能领舰。如性能分析夫嗓,VisualVM的性能分析功能甚至比起JProfiler迟螺、YourKit等專業(yè)且收費(fèi)的Profiling工具都不會(huì)遜色多少,而且VisualVM的還有一個(gè)很大的優(yōu)點(diǎn):不需要被監(jiān)視的程序基于特殊Agent運(yùn)行啤月,因此它對(duì)應(yīng)用程序的實(shí)際性能的影響很小,使得它可以直接應(yīng)用在生產(chǎn)環(huán)境中煮仇。這個(gè)優(yōu)點(diǎn)是JProfiler、YourKit等工具無(wú)法與之媲美的谎仲。
VisualVM兼容范圍與插件安裝
VisualVM基于NetBeans平臺(tái)開(kāi)發(fā)浙垫,因此它一開(kāi)始就具備了插件擴(kuò)展功能的特性,通過(guò)插件擴(kuò)展支持郑诺,VisualVM可以做到:
- 顯示虛擬機(jī)進(jìn)程以及進(jìn)程的配置夹姥、環(huán)境信息(jps、 jinfo)辙诞。
- 監(jiān)視應(yīng)用程序的CPU辙售、GC、堆飞涂、方法區(qū)以及線程的信息(jstat旦部、jstack)。
- dump以及分析堆轉(zhuǎn)儲(chǔ)快照(jmap较店、jhat)士八。
- 方法級(jí)的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時(shí)間最長(zhǎng)的方法梁呈。
- 離線程序快照:收集程序的運(yùn)行時(shí)配置婚度、線程dump、內(nèi)存dump等信息建立個(gè)快照, 可以將快照發(fā)送開(kāi)發(fā)者處進(jìn)行Bug反饋官卡。
生成蝗茁、瀏覽堆轉(zhuǎn)儲(chǔ)快照
在VisualVM中生成dump文件有兩種方式,可以執(zhí)行下列任一操作:
- 在“應(yīng)用程序”窗口中右鍵單擊應(yīng)用程序節(jié)點(diǎn),然后選擇“堆Dump”。
- 在“應(yīng)用程序”窗口中雙擊應(yīng)用程序節(jié)點(diǎn)以打開(kāi)應(yīng)用程序標(biāo)簽,然后在“監(jiān)視”標(biāo)簽中單擊“堆Dump”寻咒。
分析程序性能
在Profiler頁(yè)簽中哮翘,VisualVM提供了程序運(yùn)行期間方法級(jí)的CPU執(zhí)行時(shí)間分析以及內(nèi)存分析,做Profiling分析肯定會(huì)對(duì)程序運(yùn)行性能有比較大的影響毛秘,所以一般不在生產(chǎn)環(huán)境中使用這項(xiàng)功能饭寺。
BTrace動(dòng)態(tài)日志跟蹤
BTrace本身也是可以獨(dú)立運(yùn)行的程序。它的作用是在不停止目標(biāo)程序運(yùn)行的前提下熔脂,通過(guò)HotSpot虛擬機(jī)的HotSwap技術(shù)動(dòng)態(tài)加入原本并不存在的調(diào)試代碼佩研。這項(xiàng)功能對(duì)實(shí)際生產(chǎn)中的程序很有意義:經(jīng)常遇到程序出現(xiàn)問(wèn)題,但排查錯(cuò)誤的一些必要信息霞揉,譬如方法參數(shù)旬薯、返回值等,在開(kāi)發(fā)時(shí)并沒(méi)有打印到日志之中,以至于不得不停掉服務(wù)适秩,通過(guò)調(diào)試增量來(lái)加入日志代碼以解決問(wèn)題绊序。當(dāng)遇到生產(chǎn)環(huán)境服務(wù)無(wú)法隨便停止時(shí)硕舆,缺一兩句日志導(dǎo)致排錯(cuò)進(jìn)行不下去是一件非常郁悶的事情。BTrace的用法還有許多骤公,打印調(diào)用堆棧抚官、參數(shù)、返回值只是最基本的應(yīng)用阶捆,在它的網(wǎng)站上有使用BTrace進(jìn)行性能監(jiān)視凌节、定位連接泄漏和內(nèi)存泄漏、解決多線程競(jìng)爭(zhēng)問(wèn)題的例子洒试。