Wednesday, April 30 2003 3:17 PM 也許你已經用 Java 寫過很棒的應用程序或者網站,但是它們看上去運行得非常得慢。不要理會一些 開發 者告訴你的成見,Java的運行速度并不是你想象的那么" name="description" />
MILY: 宋體; mso-bidi-font-family: 宋體; mso-font-kerning: 0pt">Wednesday, April 30 2003 3:17 PM
也許你已經用Java寫過很棒的應用程序或者網站,但是它們看上去運行得非常得慢。不要理會一些開發者告訴你的成見,Java的運行速度并不是你想象的那么慢。你所需要的只是弄清楚怎樣加速你的程序的運行。然而,優化的最大問題不是優化那些低速的代碼,而是找到這些代碼!而這就是JProbe Profiler能夠幫助我們的地方。
JProbe Profiler是由Sitraka開發的一個Java程序。通過運行和監控應用程序字節碼,它可以幫助程序員找到他們開發的代碼中的瓶頸處。這個要價$649的程序也許不是Java開發者工具庫中最便宜的工具,但它可能是最不可缺少的一個。
Sitraka JProbe Profiler
$649 以上
特長:
可選的文本界面安裝
實時或者離線的數據顯示
強大的用戶接口
數據導出功能
缺點:
繁瑣的注冊系統
實時遠程數據顯示需要共享網絡磁盤
在一個快照生成后不能完整的消除其中的一個方法
雖然在桌面應用上Java正在緩慢積累份額,但是人們仍然發現它最大的用處在服務器端軟件上。Sitraka在編寫JProbe的時候注意到了這一點。JProbe的安裝人員有兩種選擇,一種是帶有圖形界面的,一種是不帶圖形界面的。后者在我們需要通過終端訪問一個運行在遠程的應用程序服務器時尤其有用。我發現這會是一個很好的嘗試。
要運行JProbe首先要創建后綴為.jp1文件,它是快照捕獲設置文件,用來指定我們要研究的類和方法,這些類和方法在執行時會被計時而且細查。而.jpl文件只能被內嵌在JProbe控制臺的圖形wizard創建。我發現這個限制著實令人討厭,尤其是當我只能通過文本模式管理遠程系統的時候。我找到的唯一解決辦法就是用一個本地的圖形界面生成配置文件然后把它傳輸到遠程服務器上面。
JProbe可以和許多常用的應用程序服務器例如IBM公司的Web Sphere、JBoss、Tomcat和Resin集成。注意,JProbe缺少對Mort Bay的Jetty HTTP Servlet Container(它是JBoss缺省的servlet container)的集成支持。在它優異的能力中缺少的這一項功能也許會對你的購買計劃產生負面的影響。
在一個構造好的程序執行過程中,JProbe的分析引擎仔細的記錄下消耗的時間和每個方法生產的對象的數量。JProbe的數據可以被實時地查看,也可以延后在一個圖形控制臺里面看保存好地快照文件。這些快照文件在應用程序或者服務器被關閉退出時自動創建,而且通過.jpl文件可以指定這些文件的創建頻度。
JProbe圖形控制臺將分析引擎收集地豐富數據轉換成用戶可以理解的一種格式。在這方面它做得很成功。用戶接口尤其強大。對每個快照而言,在主窗口都有分析引擎收集到地數據地兩種不同而且相輔相成的視圖。圖A展示了一個執行快照的運行畫面。
上圖中地上半部分包含了方法調用圖,該圖通過直觀地顏色代碼展示每個方法調用的相對執行時間。在圖中,encodeAsPng的亮紅色說明在這個特定的執行過程中其消耗地時間比javascript:;" onClick="javascript:tagshow(event, '%C6%E4%CB%FB');" target="_self">其他方法多得多。將鼠標懸浮在上面可以看到它在總的方法執行時間中所占的比例。在上例中,encodeAsPng消耗了整個執行時間的74.4%,因此我們可以知道encodeAsPng可以作為被優化的候選代碼。
上圖中的下半部分視圖以表格的形式顯示了和方法調用圖中相同的時間信息。這下半部分的數據可以以多種方式存儲,甚至可以將它導出成可以比較的電子表格的形式為更進一步的外部分析做準備。除了方法運行時間,這兩個視圖還可以用來顯示對象實例數(我們可以根據它來研究非常低效率的代碼),可以幫助確定造成過度的垃圾收集延遲的間接原因。
仍有待改進之處
雖然功能強大,但是快照顯示仍然有一些地方值得改進。最顯著的問題是,在一個快照被創建之后,沒有辦法在時間份額圖中消除一個方法的影響。例如說,如果一個程序把99%的時間花在了用Socket.aclearcase/" target="_blank" >ccept方法等待新的TCP連接上時,開發者可以從視圖中去掉這個方法,但是JProbe不會重新計算其他方法所占用的時間份額。這樣,開發者只剩下大約0.05%到0.5%的大小來比較其他方法之間的時間份額。雖然通常說來,總是可以通過配置.jpl設置文件或者不計算方法執行時間等方式排除一個方法,但是這都需要重新運行程序來生成一個新的快照。JProbe應該提供一個更簡便的方法供選擇。
JProbe的一個非常優秀的特性在于,當遠程服務器上面正在運行分析引擎監控代碼時,用戶可以在本地計算機上運行其圖形控制臺。唯一的缺點是這個實時的顯示不只需要一個到遠程機器上的TCP連接,而且還需要由NFS或者SMB提供的共享網絡磁盤空間。這個不太合情理的要求使得原本完美的這個特性有了一點點瑕疵,同時也暗示了這樣的解決方法并不像是最初的設計目標,而更像是是一個事后的補救措施。
如果你的耐心有限,或者你的公司的網絡安全規定不允許你在兩臺機器之間設置共享磁盤,你仍可以從服務器下載分析快照文件到本地計算機上,然后通過JProbe的圖形控制臺瀏覽結果。
許可證系統著實討厭
不管怎樣,在你能運行JProbe并享受它所有的優良特性之前,你必須和它令人討厭的注冊系統打交道。獲得許可證的過程包括共享一些計算機認證的信息給Sitraka、公司用email寄給你許可證文件的過程。
通過在Sitraka的網站填寫文卷可以免費獲得一個十天的使用許可證。永久的許可證根據不同的功能限制有不同的價格,同時,也包括了收集你主機的不同數量的信息過程。最便宜的價格是$649,這是一個單用戶、單主機的永久許可證的價格。而一個多用戶、多主機、連接一個相關的許可證服務器的版本價格是最高的。
總的來說,我覺得JProbe會成為一個包含某些強大特性的優秀的性能分析工具。雖然它有一點點令人討厭的怪癖,而且價格偏高,但仍是一個值得考慮的有用工具。
原文轉自:http://www.anti-gravitydesign.com