默認情況下,Sun JDK中附帶的一個探查器是Java VisualVM。 這個事件探查器非常簡單易用,功能強大。
在這篇文章中,我們將看到如何安裝它并使用它來分析應用程序。
通常,無需安裝它,因為它與JDK一起安裝。 但是在幾個Unix系統中,例如Ubuntu,情況并非如此。 如果要安裝它,只需使用apt-get(或aptitude):
須藤apt-get install visualvm
要啟動它,只需啟動jvisualvm(Windows的jdk的bin目錄中的jvisualvm.exe)。
這將打開以下窗口:

這里沒有很多有趣的東西。 要分析應用程序,只需啟動它,VisualVM就會檢測到它已啟動:

之后,您只需雙擊以查看有關正在運行的應用程序的信息。 您有四個選項卡可用于您的應用程序(“概述”,“監視器”,“線程”,“探查器”)。 我們將看到所有這四個標簽。 首先,默認選項卡,概述:

此選項卡包含有關已啟動的應用程序的主要信息。 您可以看到主類,命令行參數和JVM參數。 您還可以查看哪種類型的JVM正在運行您的程序以及JVM所在的位置。 您可以看到該程序中設置的所有屬性。
一個更有趣的標簽是“監視器”標簽:

此選項卡跟蹤您的應用程序的CPU和內存使用情況。 您在此視圖中有4個圖。 第一個從左到右,從上到下顯示CPU使用率和Garbage Collector CPU使用率。 第二張圖顯示堆空間和PermGen空間的使用情況。 下一個圖顯示了應用程序中加載的類的總數,最后一個圖顯示了當前正在運行的線程數。 通過這些圖,您可以查看應用程序占用的CPU過多還是應用程序占用的內存過多。
第三個選項卡提供有關Threads的一些詳細信息:

在此視圖中,您可以看到應用程序的不同線程如何改變狀態以及它們如何演變。 您還可以查看每次進入每種狀態的時間,并且可以了解有關所需線程的詳細信息。
現在,我認為最有趣的標簽是Profiler之一:

第一次打開此選項卡時,它根本不包含任何信息。 您必須先進行一種分析,然后才能查看信息。 我們將從CPU分析開始。 只需單擊CPU按鈕,儀器就會啟動。 檢測期間,該應用程序將被阻止。 檢測完成后,您可以再次訪問該應用程序,并且將在表中顯示概要分析的結果。 當然,分析會對您的應用程序造成負擔。 通常它是不可見的,但是對于某些應用程序,您可能會失去很多流動性。 這是我通過簡單的應用程序獲得的結果:

在我的示例中,我們可以看到waitForTimeout方法占用了CPU時間的81.6%。 我們還可以看到,notifyDecision和getSensor方法是緊隨其后的兩個最消耗CPU的方法,也許對它們進行優化很有趣。 您還可以查看每個方法的調用次數,也許您會發現一個調用時間過多的方法。
我們可以做的下一個性能分析是內存性能分析。 再次在這里,您必須開始分析,儀器將啟動,在此期間,應用程序將被凍結。 這是我的申請結果:

在這里,我們可以看到該應用程序存儲了一些大的double []和float []數組,EllipseIterator和BasicStroke類也占用了大量的內存空間。
在內存和CPU性能分析中,您都可以將結果保存到文件中以供日后查看。 例如,您可以讓應用程序通宵工作,早上保存結果并檢查結果,或者進行三個性能分析并比較三個結果。
總而言之,我不得不說這個探查器非常簡單,但是使用起來卻非常強大。 我們擁有分析器所需的主要功能,并且效果非常好。 這種工具確實可以幫助您改進應用程序,以減少CPU和內存的使用。 當然,這種工具并不能解決所有問題,它只是幫助顯示必須改進應用程序的哪一部分,改進部分是開發人員的任務,而不是最簡單的。 但是擁有這種工具是一個好的開始。
參考:通過@Blog(“ Baptiste Wicht”)的 JCG合作伙伴 Baptiste Wicht 使用Java VisualVM對應用程序進行概要分析 。
相關文章 :
- 從CLI監視OpenJDK
- 績效焦慮–關于績效不可預測性,度量和基準
- JVM選項:-client vs -server
- Java中的低GC:使用原語而不是包裝器
翻譯自: https://www.javacodegeeks.com/2012/01/profile-your-applications-with-java.html