1. 程式人生 > >利用jdk自帶的強悍工具jvisualvm檢測多執行緒的競爭

利用jdk自帶的強悍工具jvisualvm檢測多執行緒的競爭

http://blog.csdn.net/zhuyijian135757/article/details/38384579

1。啟動

在命令列輸入jvisualvm。如果jdk安裝正確的話(6.x以上版本),就會看到如下的一個視窗:

看起來相當簡潔,不像是很強大的樣子。

2。執行一個Java程式IncTestN,jvisualvm會自動找到它

3.右鍵點選它,”開啟”

可以看到它有很多標籤頁,可以讓我們監測程式的各種資料。預設沒有這麼多,我其實安裝了一些jvisualvm的外掛。

4。檢視jvm引數及系統屬性

5。檢視cpu、記憶體、類、執行緒的統計資料

注意,右邊第一個還可以檢視PermGen。對於scala程式,因為它產生了大量的類定義,所以PermGen有可能會不足,可通過該選項檢視PermGen,適當調整:

可以看到,對於本程式來說,PermGen還是比較充分的,無須調整。

6。檢視各執行緒執行情況

這個是重點,我們需要知道各執行緒的執行情況,特別是否被synchronized阻塞了。

注意右下角,有四個狀態說明,分別是:

  1. 執行(Running):我們最喜歡的狀態。說明該執行緒正在執行程式碼,沒有問題。
  2. 休眠(Sleeping):呼叫了Thread.sleep後的狀態,說明執行緒正停在某個Thread.sleep處
  3. 等待(Wait):手動呼叫了wait方法,或者某些IO操作,在阻塞中等待資料。
  4. 監視(Monitor):這裡就是我想找的問題了。它表示執行緒想執行一段synchronized中的程式碼,但是發現已經有其它執行緒正在執行,自己被block了,只能無奈地等待。如果這種狀態多,說明程式需要好好優化。

從上面的這個圖可以看到,下面多個執行緒都處於”監視”狀態。多個執行緒都卡在了獨木橋的一頭過不去,幹不了活幹著急呢。

當然這個程式是我專門設計成這樣的,存在著嚴重的效能問題,需要好好優化。

7。檢視各執行緒的統計資料

如果我們需要一些統計資料,比如某個執行緒總共運行了多少時間,”執行”狀態有多久(或百分比),休眠、等待、監視有多久,則需要用到”表”這一頁。

從中可以看到這個悲催的程式,幾分所有的時間都用在了synchronized的阻塞上了。只有百分之零點幾的時間在執行中,效率可真低啊。

還可以使用圖表方式來看這些資料,得到更直觀的體驗:

8。檢視各方法的執行時間

想不想程式中到底是哪些方法一直在執行?可使用”抽樣器”功能:

我們需要先點選上面的”CPU”按鈕,它才會開始統計,下面的資料會慢慢多起來。從上圖可以看出,程式一直在執行SynIncer.inc()方法,它佔用了所有方法執行總時間的99.8%。如果我們想提高程式效能,則需要重點優化它,讓它執行得更快。

還想知道方法被呼叫的次數?使用”Profiler”頁中的功能:

它與抽樣器很像,但是最後多了一個”呼叫次數”。

9。檢視哪些物件佔用了最多的記憶體

當出現了記憶體不足的錯誤時,想不想知道到底是哪些物件把記憶體都佔用了?這時需要使用”抽樣器”的”記憶體”檢測功能:

從表中可以看出當前最多的是哪些物件,它們有多少個,用了多少個位元組。

10。安裝更多外掛

jvisualvm還線上提供了很多外掛,提供了更多的功能。我們可以通過”工具”->”外掛”,找到並安裝它們。推薦全裝,比如我就安裝了全部(當前有16個):

安裝重啟後,再找到某個程式節點,就會發現有更多的標籤頁可用。

11。檢視MBeans

MBeans可以將程式中的某些資訊暴露給外部。有一些庫在設計時,就考慮到了這一點。如果我們不滿足於前面那些基礎資訊,可以在這裡看看。

由於當前程式沒有使用到提供MBeans資訊的庫,所以看不到什麼多少有用的資訊。如果你使用了某些資料庫連線池(提供了MBeans功能的),可以在這裡看到池裡的一些資訊,還可以通過”Operations”標籤頁,對程式資料進行一些修改。

12。檢視gc情況

垃圾回收是我們不能忽略的一個地方。我們可以通過”Visual GC”頁,檢視到非常詳細的垃圾回收情況。

可以說,這個功能提供的資訊真是非常地詳盡,連兩個小Eden的情況也實時地表現出來了。不過要看懂這些資料,還是需要先到網上看看講解Java垃圾回收的文章,瞭解其內部原理才行。

13。更多更詳細的監測內容

Tracer頁提供了更多的監測內容

可以看到程式中遍佈探針,讓我們實時瞭解到各處的執行情況。先選中感興趣的內容,然後點選”Start”按鈕即可。

這一塊比較專業,普通開發人員可能都不知道這些資料到底有什麼用。但專業人士可能會覺得會很需要它們。

JvisualVM的大部分功能都已經演示完了,我想它的功能的確很強大,在我們平時的開發中會非常有用。


相關推薦

利用jdk強悍工具jvisualvm檢測執行競爭

http://blog.csdn.net/zhuyijian135757/article/details/38384579 1。啟動 在命令列輸入jvisualvm。如果jdk安裝正確的話(6.x以上版本),就會看到如下的一個視窗: 看起來相當簡潔,不像是很強

linux/windows下利用JDK工具獲取thread dump檔案和heap dump檔案

在上一篇部落格http://blog.csdn.net/aitangyong/article/details/24009283中介紹了dump的一些基本概念,這一篇部落格介紹如何在windows/li

利用JDK工具構建一個簡單的Java SOAP Web Service

這兩天由於工作的某些原因,需要了解一些關於Web Service的知識,然後在網上看到了這麼一篇簡單的有點略微過時但是對於初次接觸Web Service的同學來說又很有必要了解的文章,於是自己嘗試著將文章翻譯過來。 A. 構造Web服務 1. 構造一個簡單的hello

死鎖排查的小竅門 --使用jdk管理工具jstack

pre ble new deadlock 一段 指令 tro bject print 本文版權歸 遠方的風lyh和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作。 開發時間久了,難免會寫出一些一些死鎖的代碼,自己明明調用該方法可該方法就是不執行、不進該

利用JDK的keytool生成SSL證書然後導入到SpringBoot

生成 密鑰 clas alias 自帶 就會 輸入 http -type 一:生成命令如下(這一步生成的暫不知道幹嘛用的) E:\Desktop\Documents\證書>keytool -genkey -alias tomcat -keypass 123456

利用 JDK 的 org.w3c.dom 進行物件, map 與 xml 的互相轉換

利用 JDK 自帶的 org.w3c.dom 進行物件,map 與 xml 的簡單互相轉換, 其中用到了一個工具類 Hutools 下面是hutools的maven依賴 <dependency> <groupId>cn.hutool</groupId> <arti

分析802.11無線報文hexdump內容:利用wireshark二進位制工具text2pcap將hexdump內容轉換為pcap檔案

除錯wifi驅動,有時會將報文內容以16進位制形式打印出來,如下是一個beacon報文的內容: 0000 80 00 00 00 ff ff ff ff ff ff 40 e3 d6 cb fe d0 0010 40 e3 d6 cb fe d0 70 29 7b 00 55 41 00 00 00

JDK工具彙總

1、 jps -l  (全稱JVM Process Status Tool)輸出主類的全名,如果是jar包,輸出jar包的全路徑,如下: 2、jstat(JVM Statics Monitoring Tool)    jstat -gc pid  time times【可

JDK強大工具記錄

1.JFR java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX

斷點續傳的執行下載

多執行緒下載 原理:伺服器CPU分配給每條執行緒的時間片相同,伺服器頻寬平均分配給每條執行緒,所以客戶端開啟的執行緒越多,就能搶佔到更多的伺服器資源,所以使用多執行緒下載的話,速度會更快。 JavaSE實現帶斷點續傳的多執行緒下載步驟: 1、傳送http請求至下載地址,獲取要下載

32位jdk中, long 型別的變數執行中賦值操作問題

package im.zxd.test; public class LongTest {     public static  long num = 0;     public static final long value1=-1L;     public stati

併發程式設計之美,你深入理解java執行原理

1.什麼是多執行緒? 多執行緒是為了使得多個執行緒並行的工作以完成多項任務,以提高系統的效率。執行緒是在同一時間需要完成多項任務的時候被實現的。 2.瞭解多執行緒 瞭解多執行緒之前我們先搞清楚幾個重要的概念! 如上圖所示:對我們的專案有一個主記憶體,這個主記憶體裡面存放了我們的共享變數、方法區、堆中的物件等

java第16天----TreeMap的注意點,增強for迴圈,Arrays和Collecttions工具類,執行簡介

昨天知識總結 1.泛型 泛型的定義 泛型的基礎 泛型在類上,介面上,方法上的使用 泛型–限制上限,限制下線 2.Map Map與Collection的比較 Map介面常用方法 Map的遍歷----會—重點 HashMap的去重和TreeMap的排序 Tre

WPF利用Interactive Data Display實現示波器(C#執行和WPF執行

2018.8.7(已實現) 首先,今天還沒有實現示波器,專案中需要這個功能,在探索中有了一點進展,先記錄下來。 實現的chart控制元件,能夠相應滑輪、滑鼠拖動、放大縮小,很適合作為示波器的背景。 關於Interactive Data Display的引用,可以考慮

WPF 定義等待對話方塊、執行等待的問題

從網上找個等待對話方塊的程式例項,找了好幾次依然不怎麼滿意。於是自己寫一個好了。並且封裝一下。 目前僅適用於WPF。winform的可以稍微改一下也行 不說廢話了。 一、等待對話方塊介面設計 <span style="font-size:14px;color:#3

曹工說JDK原始碼(2)--ConcurrentHashMap的執行擴容,說白了,就是分段取任務

# 前言 先預先說明,我這邊jdk的程式碼版本為1.8.0_11,同時,因為我直接在本地jdk原始碼上進行了部分修改、除錯,所以,導致大家看到的我這邊貼的程式碼,和大家的不太一樣。 不過,我對原始碼進行修改、重構時,會保證和原始程式碼的功能、邏輯嚴格一致,更多時候,可能只是修改變數名,方便理解。 大家也

JDKjvisualvm監控工具

img 遠程 運行 工具 font 本地 -s tomcat art 定位 工具位於jdk\bin目錄下(雙擊運行): 可以本地或者遠程調試,本地調試會自動加載,遠程調試需要配置。下面以Tomcat為例。 概述 監視 線程 抽樣器

JDKjvisualvm安裝Visual GC插件

plugins 點擊下載 png 鏈接 cmd pan 自帶 ron 點擊 1.打開cmd,輸入jvisualvm,回車; 2.點擊工具——>插件; 3.訪問網址:https://visualvm.github.io/pluginscenters.html,找到

Windows強大的入侵檢測工具——Netstat 命令 查詢是否中木馬

window 安全策略 關閉端口 電腦系統 。net 機器 查看 -- 實時   Netstat命令可以幫助我們了解網絡的整體使用情況。根據Netstat後面參數的不同,它可以顯示不同的網絡連接信息。Netstat的參數如圖,下面對其中一些參數進行說明。如何檢測本機是否有

C# 利用VS的WSDL工具生成WebService服務類

web 路徑 引用 src cnblogs logs png program 菜單 WebService有兩種使用方式,一種是直接通過添加服務引用,另一種則是通過WSDL生成。 添加服務引用大家基本都用過,這裏就不講解了。 那麽,既然有直接引用的方式,為什麽還要通過WSDL