久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

常用 Java Profiling 工具的分析與比較

 ShangShujie 2010-08-14

 

簡(jiǎn)介: 

在 Java 程序的開發(fā)過(guò)程中,,不可避免地會(huì)遇到內(nèi)存使用,、性能瓶頸等問(wèn)題。Java Profiler 工具能幫助開發(fā)人員快速,、有效地定位這些問(wèn)題,,因此成為了 Java 開發(fā)過(guò)程中的一個(gè)重要工具。目前市場(chǎng)上的 Java Profiler 工具種類繁多,,本文將對(duì)目前比較常見的幾種工具進(jìn)行簡(jiǎn)要介紹,,并從功能,、性能等角度作比較,從而幫助 Java 程序員選擇合適的 Java Profiler 工具,。

本文主要分為三個(gè)部分:第一部分簡(jiǎn)要介紹 Java Profiler 工具的原理;第二部分對(duì)目前常見的 Java Profiler 工具 TPTP, CodePro Profiler, YourKit Java Profiler, JProfiler 進(jìn)行簡(jiǎn)要介紹,;第三部分對(duì)以上工具從不同的角度進(jìn)行比較,,幫助開發(fā)人員選擇合適的工具。

發(fā)布日期: 2010 年 8 月 13 日
級(jí)別: 初級(jí)
建議: 0 (添 加評(píng)論)

1 star2
stars3
stars4
stars5
stars 平均分 (共 1 個(gè)評(píng)分 )

相對(duì)于靜態(tài)代碼分析,,Profiling 是通過(guò)收集程序運(yùn)行時(shí)的信息來(lái)研究程序行為的動(dòng)態(tài)分析方法。其目的在于定位程序需要被優(yōu)化的部分,,從而提高程序的運(yùn)行速度或是內(nèi)存使用效率,。收集程序運(yùn)行 時(shí)信息的方法主要有以下三種:

  • 事件方法:對(duì)于 Java,可以采用 JVMTI(JVM Tools Interface)API 來(lái)捕捉諸如方法調(diào)用,、類載入,、類卸載、進(jìn)入 / 離開線程等事件,,然后基于這些事件進(jìn)行程序行為的分析,。
  • 統(tǒng)計(jì)抽樣方法(sampling): 該方法每隔一段時(shí)間調(diào)用系統(tǒng)中斷,然后收集當(dāng)前的調(diào)用棧(call stack)信息,,記錄調(diào)用棧中出現(xiàn)的函數(shù)及這些函數(shù)的調(diào)用結(jié)構(gòu),,基于這些信息得到函數(shù)的調(diào)用關(guān)系圖及每個(gè)函數(shù)的 CPU 使用信息。由于調(diào)用棧的信息是每隔一段時(shí)間來(lái)獲取的,,因此不是非常精確的,,但由于該方法對(duì)目標(biāo)程序的干涉比較少,目標(biāo)程序的運(yùn)行速度幾乎不受影響,。
  • 植入附加指令方法(BCI): 該方法在目標(biāo)程序中插入指令代碼,,這些指令代碼將記錄 profiling 所需的信息,包括運(yùn)行時(shí)間,、計(jì)數(shù)器的值等,,從而給出一個(gè)較為精確的內(nèi)存使用情況、函數(shù)調(diào)用關(guān)系及函數(shù)的 CPU 使用信息,。該方法對(duì)程序執(zhí)行速度會(huì)有一定的影響,,因此給出的程序執(zhí)行時(shí)間有可能不準(zhǔn)確。但是該方法在統(tǒng)計(jì)程序的運(yùn)行軌跡方面有一定的優(yōu)勢(shì),。

目前市面上的 Java Profiler 工具采用的信息收集方法通常是以上三種方法的任意組合,。

Profiler 工具功能簡(jiǎn)介

雖然市場(chǎng)上的 Java Profiler 工具有不少,但是基本功能大多相似,,本節(jié)首先對(duì)這些基本功能進(jìn)行介紹,。

  • 遙測(cè)(Telemetry):遙測(cè)是一種用來(lái)查看應(yīng)用程序運(yùn)行行為的最簡(jiǎn)單的方法,。通常會(huì)有多個(gè)視圖(View)分別實(shí)時(shí)地顯示 CPU 使用情況、內(nèi)存使用情況,、線程狀態(tài)以及其他一些有用的信息,,以便用戶能很快地發(fā)現(xiàn)問(wèn)題的關(guān)鍵所在。
    • CPU Telemetry 視圖一般用于顯示整個(gè)應(yīng)用程序的 CPU 使用情況,,有些工具還能顯示應(yīng)用程序中每個(gè)線程的 CPU 使用情況,。
    • Memory Telemetry 視圖一般用于顯示堆內(nèi)存和非堆內(nèi)存的分配和使用情況。
    • Garbage Collection Telemetry 視圖顯示了 JVM 中垃圾收集器的詳細(xì)信息,。
    • Threads Telemetry 視圖一般用于顯示當(dāng)前運(yùn)行線程的個(gè)數(shù),、守護(hù)進(jìn)程的個(gè)數(shù)等信息。
    • Classes Telemetry 視圖一般用于顯示已經(jīng)載入和還沒有載入的類的數(shù)量,。
  • 快照(snapshot):應(yīng)用程序啟動(dòng)后,,profiler 工具開始收集各種執(zhí)行數(shù)據(jù),其中一些數(shù)據(jù)直接顯示在遙測(cè)視圖中,,而另外大部分?jǐn)?shù)據(jù)被保存在內(nèi)部,,直到用戶要求獲取快照,基于這些保存的數(shù)據(jù)的統(tǒng)計(jì)信息才被 顯示出來(lái),??煺瞻藨?yīng)用程序在一段時(shí)間內(nèi)的執(zhí)行信息,通常有兩種類型的快照:CPU 快照和內(nèi)存快照,。
    • CPU 快照主要包含了應(yīng)用程序中函數(shù)的調(diào)用關(guān)系及運(yùn)行時(shí)間,,這些信息通常可以在 CPU 快照視圖中進(jìn)行查看,。
    • 內(nèi)存快照則主要包含了內(nèi)存的分配和使用情況,、載入的所有類、存在的對(duì)象信息及對(duì)象間的引用關(guān)系,。這些信息通??梢栽趦?nèi)存快照視圖中進(jìn) 行查看。
  • CPU Profiling:CPU Profiling 的主要目的是統(tǒng)計(jì)函數(shù)的調(diào)用情況及執(zhí)行時(shí)間,,或者更簡(jiǎn)單的情況就是統(tǒng)計(jì)應(yīng)用程序的 CPU 使用情況,。通常有兩種方式來(lái)顯示 CPU Profiling 結(jié)果:CPU 遙測(cè)和 CPU 快照。
  • 內(nèi)存 Profiling:內(nèi)存 Profiling 的主要目的是通過(guò)統(tǒng)計(jì)內(nèi)存使用情況檢測(cè)可能存在的內(nèi)存泄露問(wèn)題及確定優(yōu)化內(nèi)存使用的方向,。通常有兩種方式來(lái)顯示內(nèi)存 Profiling 結(jié)果:內(nèi)存遙測(cè)和內(nèi)存快照
  • 線程 Profiling:線程 Profiling 主要用于在多線程應(yīng)用程序中確定內(nèi)存的問(wèn)題所在,。 一般包括三個(gè)方面的信息:
    • 某個(gè)線程的狀態(tài)變化情況
    • 死鎖情況
    • 某個(gè)線程在線程生命期內(nèi)狀態(tài)的分布情況
  • Profiling 的啟動(dòng)設(shè)置:類似于 eclipse 中 Run 和 Debug 的啟動(dòng)設(shè)置,進(jìn)行 Profiling 之前也需要進(jìn)行啟動(dòng)設(shè)置,,包括:profiling 的模式 (CPU profiling 或內(nèi)存 profiling),,信息獲取類型(遙測(cè) , 抽樣統(tǒng)計(jì)或者 BCI ) 等等。
  • Profiler Preference 設(shè)置:主要用于 Profiler 過(guò)濾器(選擇需要關(guān)注的包,、類),、取樣間隔時(shí)間的設(shè)置等,。

Java Profiler 工具介紹

本文接下來(lái)將對(duì)目前市場(chǎng)上常見的幾種 Java Profiler 工具進(jìn)行介紹。

TPTP

TPTP(Test and Performance Tools Platform)是 eclipse 官方的 Profiling 工具插件,。TPTP 提供了諸如測(cè)試,,追蹤(trace),性能測(cè)試,,圖形界面性能分析等功能,。同時(shí) TPTP 還是一個(gè)可擴(kuò)展的開發(fā)平臺(tái)框架,你可以對(duì)它加以擴(kuò)展集成到你自己的產(chǎn)品中,。TPTP 可以通過(guò) Eclipse update Manager 或者是安裝包進(jìn)行安裝,安裝成功后會(huì)在 eclipse 中增加如下所示的按鈕,,另外一個(gè)專門的用于檢查 TPTP profiling 結(jié)果的 perspective 也會(huì)添加進(jìn) eclipse 中,,如下圖所示:


圖 1. TPTP
圖 1. tptp

CodePro Profiler

CodePro Profiler 是由 instantiations 公司推出的一款商用 eclipse 插件,它可以通過(guò) Eclipse update Manager 進(jìn)行安裝或者是將安裝包直接解壓縮后保存在 eclipse 的指定目錄下,。與 TPTP 類似,,安裝成功后,有一個(gè)專門的用于查看 CodePro profiling 結(jié)果的 perspective 會(huì)添加進(jìn) eclipse 中,,如下圖所示:


圖 2. CodePro
圖 2. codepro

YourKit Profiler

YourKit Java Profiler 也是一款商用軟件,,支持的操作系統(tǒng)包括:Windows, Linux, FreeBSD, Mac OS X, Solaris 以及 HP-UX;支持的 IDE 包括:Eclipse, JBuilder, JDeveloper, NetBeans 以及 Intellij IDEA,。安裝成功且首次啟動(dòng) YourKit Java Profiler 后,,會(huì)彈出一個(gè)對(duì)話框,讓用戶選擇 YourKit Java Profiler 要集成進(jìn)的 IDE,,并指定該 IDE 的安裝路徑,,點(diǎn)擊”Install Plugin”按鈕并集成成功之后,Eclipse 中會(huì)出現(xiàn)如下圖標(biāo),,用戶就可以從 Eclipse 中啟動(dòng) Profiling,,但是 profiling 的結(jié)果需要在 YourKit Java Profiler 中進(jìn)行查詢,如下圖所示:


圖 3. YourKit
圖 3. yourkit

JProfiler

JProfiler 是由 ej-technologies 推出的一款商用軟件,,支持的操作系統(tǒng)有:Windows, Linux, Mac OS X, FreeBSD, Solaris, AIX 以及 HP-UX,;支持的 IDE 包括:Eclipse, NetBeans, Intellij IDEA, JBuiler 以及 JDeveloper。安裝成功并首次啟動(dòng) JProfiler 后,,會(huì)彈出一個(gè)設(shè)置界面,,當(dāng)完成左欄所示的那些步驟后,Eclipse 中就會(huì)出現(xiàn)如下圖標(biāo),,用戶就可以從 Eclipse 中啟動(dòng) Profiling,。與 YourKit Java Profiler 類似,profiling 的結(jié)果需要在 JProfiler 中進(jìn)行查詢,,如下圖所示:


圖 4. JProfiler
圖 4. jprofiler

Java Profiler 工具比較

本章節(jié)將從如下幾個(gè)方面對(duì)上述工具進(jìn)行比較:

  • 與 Eclipse 的集成性
    • TPTP:是一款基于 Eclipse 開發(fā)的插件,,因此與 eclipse 的集成性很好,。安裝成功后,對(duì) TPTP 的一切設(shè)置與操控都可以在 eclipse 中完成,;另外,,profiling 的結(jié)果也可以在 eclipse 中進(jìn)行查詢。
    • CodePro Profiler: 與 TPTP 類似,,CodePro Profiler 也是一款基于 eclipse 開發(fā)的插件,,因此與 eclipse 的集成性很好好。用戶在 eclipse 中就可以完成對(duì) profiling 的所有操作,。
    • YourKit Java Profiler: YourKit Java Profiler 可以說(shuō)是一個(gè)比較獨(dú)立的工具,,安裝成功后,用戶可以直接在 eclipse 中啟動(dòng) YourKit Java Profiler 并對(duì) profiling 選項(xiàng)進(jìn)行配置,,但是用戶必須在 YourKit Java Profiler 工具中對(duì) Profiling preferrence 進(jìn)行配置,,而且 profiling 信息必須在 YourKit Java Profiler 中進(jìn)行查看。因此和 Eclipse 的集成度一般,。
    • JProfiler: JProfiler 也是一款比較獨(dú)立的工具,,安裝成功后,用戶可以直接在 eclipse 中啟動(dòng) JProfiler,,其他所有操作必須回到 JProfiler 工具中進(jìn)行,。因此和 Eclipse 的集成性不好。
  • 遙測(cè)種類
    • TPTP:目前使用的 4.6.2 的版本只提供了線程 Telemetry,。
    • CodePro Profiler: 總共有五個(gè)類型:CPU, 內(nèi)存 , 線程 , 載入的類以及垃圾收集,。
    • YourKit Java Profiler: 與 CodePro Profiler 相比,缺少載入類的監(jiān)測(cè),。
    • JProfiler: 與 CodePro Profiler 一樣,,總共有五個(gè)類型的監(jiān)測(cè)方法。
  • CPU 快照包含的統(tǒng)計(jì)數(shù)據(jù)類型
    • TPTP: CPU 快照包含的統(tǒng)計(jì)數(shù)據(jù)有:
      • 包的組成關(guān)系,,細(xì)化到包含的類及類中的方法,。
      • 方法的調(diào)用關(guān)系:以每個(gè)線程為根節(jié)點(diǎn)的方法調(diào)用信息,對(duì)于樹中出現(xiàn)的代表方法的每個(gè)節(jié)點(diǎn),,列出了該方法的運(yùn)行時(shí)間或運(yùn)行時(shí)間百分 比,,以及該方法被調(diào)用的次數(shù)。
      • 方法被調(diào)用情況:列出了直接調(diào)用某方法的其他方法,,以及這些方法調(diào)用該方法的次數(shù)及相關(guān)運(yùn)行時(shí)間,。
      • 熱點(diǎn)列表:包含了 CPU 占用時(shí)間排列前十的方法、類或包,。
    • CodePro Profiler: CPU 快照包含的統(tǒng)計(jì)數(shù)據(jù)類型有:
      • 包的組成關(guān)系,,細(xì)化到包含的類及類中的方法。
      • 方法的調(diào)用關(guān)系。以樹結(jié)構(gòu)表示,,根據(jù)根節(jié)點(diǎn)表示的對(duì)象的不同,,分為三種類型:以每個(gè)線程為根節(jié)點(diǎn)的方法調(diào)用關(guān)系,以整個(gè)線程為根 節(jié)點(diǎn)的方法調(diào)用關(guān)系,,以及以每個(gè)方法為根節(jié)點(diǎn)的方法調(diào)用關(guān)系,。對(duì)于樹中出現(xiàn)的代表方法的每個(gè)節(jié)點(diǎn),列出了該方法的運(yùn)行時(shí)間或運(yùn)行時(shí)間百分比,,以及由該方法 生成的對(duì)象個(gè)數(shù)和為這些對(duì)象分配的內(nèi)存大小,。
      • 方法的被調(diào)用關(guān)系。該關(guān)系以樹結(jié)構(gòu)表示,,其中根節(jié)點(diǎn)為某個(gè)指定的方法,,每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)為父節(jié)點(diǎn)的調(diào)用者。
      • 熱點(diǎn)列表:包含了 CPU 占用時(shí)間排前的一些方法,。
    • YourKit Java Profiler:CPU 快照包含的統(tǒng)計(jì)數(shù)據(jù)類型與 CodePro Profiler 類似,;
    • JProfiler:與 CodePro Profiler 相比,缺少以每個(gè)方法為根節(jié)點(diǎn)的方法調(diào)用關(guān)系,。因此當(dāng)要查看以某個(gè)方法為調(diào)用起點(diǎn)的調(diào)用關(guān)系時(shí),需要到以線程為根的樹結(jié)構(gòu)當(dāng)中去查找,。另外,,方法的被調(diào)用 關(guān)系不是以樹結(jié)構(gòu)來(lái)表示的,而是以圖的方式來(lái)顯示的,,當(dāng)調(diào)用關(guān)系比較復(fù)雜的時(shí)候,,很難在一個(gè)屏幕中看到一個(gè)全局關(guān)系圖。
  • 內(nèi)存快照包含的統(tǒng)計(jì)數(shù)據(jù)類型
    • TPTP:包含了類實(shí)例的內(nèi)存分配情況,,包括實(shí)例化的對(duì)象個(gè)數(shù),,以及這些對(duì)象的本身占用內(nèi)存的大小。相對(duì)于其它 Java Profiler 工具,,TPTP 的內(nèi)存快照包含的統(tǒng)計(jì)數(shù)據(jù)類型比較少,。
    • CodePro Profiler: 包含的統(tǒng)計(jì)數(shù)據(jù)有
      • 類實(shí)例的內(nèi)存分配情況,包括實(shí)例化的對(duì)象個(gè)數(shù),,以及這些對(duì)象的 shallow 和 retained 大小,。(Shallow size 就是對(duì)象本身占用內(nèi)存的大小,不包含對(duì)其他對(duì)象的引用,;Retained size 是該對(duì)象自己的 shallow size,,加上從該對(duì)象能直接或間接訪問(wèn)到的 shallow size 之和,即該對(duì)象被 GC 之后所能回收到內(nèi)存的總和),。
      • 最大對(duì)象列表:包含了 retained 大小排前的一些對(duì)象,。
      • 有可能存在內(nèi)存泄漏的對(duì)象列表:包含了有可能存在內(nèi)存泄漏的對(duì)象以及可能性大小。
    • YourKit Java Profiler:與 CodePro Profiler 相比,,缺少內(nèi)存泄露對(duì)象列表這一項(xiàng),。
    • JProfiler:與 CodePro Profiler 相比,,缺少 retained size 統(tǒng)計(jì)數(shù)據(jù)及內(nèi)存泄露對(duì)象列表。
  • 源代碼定位功能,,即在快照中選中某個(gè)類,、成員變量或者方法時(shí),可以在源代碼中定位到對(duì)應(yīng)的定義,。
    • TPTP:只能定位到某個(gè)類,,無(wú)法定位到方法或其中的成員變量。
    • CodePro Profiler: 擁有該功能,,但是只能定位到類及成員變量,,無(wú)法定位到方法。
    • YourKit Java Profiler:可以定位到類,、成員變量及方法,。
    • JProfiler:與 CodePro Profiler 類似。
  • 快照操作,,主要從快照的獲取,、快照的保存及快照的比較這三方面進(jìn)行比較。
    • TPTP:當(dāng)應(yīng)用程序啟動(dòng)后,,用戶可以選擇在適當(dāng)?shù)臅r(shí)候進(jìn)行快照獲?。贿@些快照不會(huì)自動(dòng)保存,,因此當(dāng) eclipse 關(guān)閉后,,這些快照數(shù)據(jù)將會(huì)消失,但是用戶可以通過(guò) export 的方式將需要的快照保存下來(lái),。
    • CodePro Profiler: 當(dāng)應(yīng)用程序啟動(dòng)后,,用戶可以選擇在適當(dāng)?shù)臅r(shí)候進(jìn)行快照獲取,;這些快照會(huì)被自動(dòng)保存在 Eclipse Workspace 之外的一個(gè)臨時(shí)的空間,,當(dāng) eclipse 關(guān)閉后,這些快照將會(huì)消失,,用戶可以通過(guò) export 的方式將需要的快照保存下來(lái),;CodePro Profiler 還提供了快照的比較功能,不過(guò)前提是這兩個(gè)快照的類型必須相同(例如:都是以 sampling 模式或 BCI 模式運(yùn)行的),。
    • YourKit Java Profiler:當(dāng)應(yīng)用程序啟動(dòng)后,,用戶可以選擇在適當(dāng)?shù)臅r(shí)候進(jìn)行快照獲取,針對(duì)內(nèi)存快照,,YourKit Java Profiler 還提供了自動(dòng)獲取快照的功能,;這些快照會(huì)被自動(dòng)保存到一個(gè)臨時(shí)的文件夾中,eclipse 關(guān)閉后,這些文件不會(huì)消失,;另外,,YourKit Java Profiler 也提供了快照比較功能。
    • JProfiler:工具會(huì)要求你指定一個(gè)目錄來(lái)保存該 snapshot,。
  • 性能,,在 sampling 模式下,這些工具的性能相差不大,,這里主要比較在 BCI 模式下的性能,。
    • TPTP:目前使用的 4.6.2 的版本沒有 BCI 模式。
    • CodePro Profiler:當(dāng)程序比較大的情況下,,采用 BCI 模式進(jìn)行 profiling 的速度比較慢,;另外,在獲取內(nèi)存泄露候選者的時(shí)候,,速度也是相當(dāng)慢,。(當(dāng)程序代碼量 5 萬(wàn)行時(shí),用 CodePro Profiler 進(jìn)行 Profiling 需要 5 分鐘,,在獲取內(nèi)存泄露候選者時(shí),,需要花費(fèi) 20 分鐘)
    • YourKit Java Profiler:BCI 模式下的運(yùn)行速度還可以。(當(dāng)程序代碼量為 5 萬(wàn)行時(shí),,需要 1 分鐘)
    • JProfiler:感覺不出程序運(yùn)行速度受影響,。(當(dāng)程序代碼量為 5 萬(wàn)行時(shí),需要半分鐘)
  • 健壯性,,采用 CodePro Profiler 對(duì)比較大的應(yīng)用程序進(jìn)行 profiling 時(shí),很容易出現(xiàn)棧溢出的錯(cuò)誤,。

結(jié)論

TPTP 是一款基于 eclipse 的開源軟件,,且提供的功能比較簡(jiǎn)單,因此適用于基于 eclipse 開發(fā)的應(yīng)用程序,,且該應(yīng)用程序比較簡(jiǎn)單的情況,;Codepro Profiler 提供的功能相對(duì)來(lái)說(shuō)比較豐富,且與 eclipse 的集成性很好,,但是在性能方面有待改善,,因此適用于基于 eclipse 開發(fā)的應(yīng)用程序,且對(duì)性能要求不高的情況,;YourKit Java Profiler,,JProfiler 與 Eclipse 的集成性都屬于一般,提供的功能也比較豐富,,且性能不錯(cuò),,因此適用于對(duì) eclipse 集成度要求不高,且對(duì)性能要求較高的情況。


參考資料

學(xué)習(xí)



作者簡(jiǎn)介

周鵬,,CSTL 軟件工程師,從事過(guò)三年 Mainframe 上系統(tǒng)軟件的開發(fā),,一年 Director6.1 在 IBM pSeries 的測(cè)試工作以及測(cè)試環(huán)境的維護(hù)工作,。目前負(fù)責(zé) Director6.1 與其他產(chǎn)品,如 IBM Tivoli, HP OVO, CA NSM 等的集成開發(fā)工作,。

徐曉琴,,Verigy 軟件工程師,有多年 Java, C++ 的開發(fā)經(jīng)驗(yàn),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多