摘要:一問一答的形式輕鬆學習掌握java工具。
以一問一答的形式學習java工具
Q:檢查記憶體洩露的工具有?A: jmap生成dump轉儲檔案,jhat視覺化檢視。
Q:某程序CPU使用率一直佔滿,用什麼工具可以排查?A:top -Hp pid找到最佔CPU的執行緒
然後jstack來查詢那個執行緒此時所處的堆疊,確定問題發生位置。
各工具詳細介紹jstack全稱: JVM Stack Trance作用: 檢視某個java程序的堆疊情況, 可用於確認死鎖、IO等待、死迴圈等問題。命令用法:
jstack pid檢視死鎖例子如下圖,找到wait的lock和已被鎖的lock
檢視等待IO例子:
jstat全稱:作用:檢視程序中記憶體使用情況,但只能給出一些簡單統計資料
統計載入了多少類以及佔用空間 jstat-class pid統計編譯了多少檔案 jstat-compiler 10Q:jstat -gcutil {pid} 2000 可以每隔2秒,對pid程序列印記憶體使用統計資訊。
gcutil的輸出如下
裡面哪個百分比如果長期處於99%-100%會有OMM風險?(OutOfMemoryError)
A:如果E和O即新生代、老年代記憶體區一直都處於滿的狀態,則很有可能會引發OMM風險。就像下面這個。
jmap全稱: JVM Memory Map作用:生成程序的記憶體堆快照當需要看一下程序裡是什麼東西佔用了過多記憶體時, 可以用jmap列印一下堆快照。命令用法:
列印堆快照: jmap-dump:file=./dumpfile.dump 程序pid檢視特定類所佔用的情況: jmap-histo:live 程序pid | grep 類名Q: 用jmap檢查記憶體洩漏例項我分了3次,每個1h呼叫jmap檢視程序的記憶體例項,檢視該時刻各物件數量第一次檢視情況如下:
第二次隔了2各小時,檢視情況如下:
請問哪個物件可能有記憶體洩漏風險?A:ObjectA可能有洩露, 因為他的物件數量增加最快,說明物件一直在增加且很多無法進行gc釋放。
jhat全稱: JVM Heap Analysis Tool
和jmap配合, 可以解析jmap生成的堆快照, 支援生成1個web程序供我們分析和檢視。
命令用法:
jhat -J-Xmx515M dumpfile.dump
此時就會啟動1個webServer,然後我們去訪問就行了
jdb全稱:Java Debugger
作用:用來對core檔案和正在執行的Java程序進行實時地除錯,類似於c++裡的gdb
常見用法:
啟動程序並除錯: jdb-classpath . Test至二級除錯某程序: jdb-attach 8000 -sourcepath /Users/wefit/Development/study/java/jtest/src/jcmd作用:多功能的工具,可以用它來匯出堆、檢視Java程序、匯出執行緒資訊、執行GC、還可以進行取樣分析,可以理解為1個性能調優時用的工具。常見命令:
檢視 當前機器上所有的 jvm 程序資訊: jcmd -l檢視指定程序的效能統計資訊: jcmd pidPerfCounter.print列出當前執行的 java 程序可以執行的操作: jcmd PIDhelp檢視執行緒堆疊資訊: jcmd PIDThread.print檢視堆記憶體資訊: jcmd PIDGC.heap_dump FILE_NAMEjps簡單記法: JVM process status全名:Java VirtualMachine Process Status Tool作用: 顯示 當前系統使用者 的 所有 Java程序情況及其程序號常用命令:
檢視程序jvm引數: jps -v輸出程式main class的完整package名或程式的jar檔案完整路徑名: jps -l輸出傳遞給main方法的引數: jps -mjinfojvminfomation
作用:和jps功能類似, 但是支援根據指定pis檢視指定程序
可以檢視JVM引數、系統引數、調整jvm引數但不支援檢視java程式的記憶體使用情況javap把java位元組碼檔案反彙編為Java原始碼檔案。
javacjava編譯工具
javac的執行過程:
JDK視覺化工具jconsole可監控jvm,即可監控本地jvm也可監控遠端jvm,管理應用程式,可以檢查死鎖等諸多問題。
jvisualvmQ: