軟件測試中5件Java性能監控小技巧:應對編程困難
很多開發者覺得自己懂Java編程,事實是大多數開發人員都只領會到了Java平臺的皮毛,所學也只夠應付工作。作者將深度挖掘Java平臺的核心功能,揭示一些鮮為人知的事實,幫助您解決最棘手的編程困難。
當應用程序性能受到損害時,大多數開發人員都驚慌失措,這在情理之中。跟蹤Java應用程序瓶頸來源一直以來都是很麻煩的,因為Java虛擬機有黑盒效應,而且Java平臺分析工具一貫就有缺陷。
然而,隨著Java5中JConsole的引入,一切都發生了改變。JConsole是一個內置Java性能分析器,可以從命令行或在GUIshell中運行。它不是完美的,但是當尖頭老板來問你關于性能的問題時,用它來應對還是綽綽有余的——這比查詢PapaGoogle要好得多。
我們將向您展示5個方法,使您可以輕松地使用JConsole(或者,它更高端的“近親”VisualVM)來監控Java應用程序性能和跟蹤Java中的代碼。
1.JDK附帶分析器
許多開發人員沒有意識到從Java 5開始JDK中包含了一個分析器。JConsole(或者Java平臺最新版本,VisualVM)是一個內置分析器,它同Java編譯器一樣容易啟動。如果是從命令行啟動,使JDK在PATH上,運行jconsole即可。如果從GUIshell啟動,找到JDK安裝路徑,打開bin文件夾,雙擊jconsole。
當分析工具彈出時(取決于正在運行的Java版本以及正在運行的Java程序數量),可能會出現一個對話框,要求輸入一個進程的URL來連接,也可能列出許多不同的本地Java進程(有時包含JConsole進程本身)來連接。
使用JConsole進行工作
在Java 5中,Java進程并不是被設置為默認分析的,而是通過一個命令行參數—-Dcom.sun.management.jmxremote——在啟動時告訴Java 5 VM打開連接,以便分析器可以找到它們;當進程被JConsole撿起時,您只能雙擊它開始分析。
分析器有自己的開銷,因此最好的辦法就是花點時間來弄清是什么開銷。發現JConsole開銷最簡單的辦法是,首先獨自運行一個應用程序,然后在分析器下運行,并測量差異。(應用程序不能太大或者太小;我最喜歡使用JDK附帶的SwingSet2樣本。)因此,我使用-verbose:gc嘗試運行SwingSet2來查看垃圾收集清理,然后運行同一個應用程序并將JConsole分析器連接到它。當JConsole連接好了之后,一個穩定的GC清理流出現,否則不會出現。這就是分析器的性能開銷。
JConsole或VisualVM?
JConsole從Java 5開始就隨著Java平臺版本一起發布,而VisualVM是在NetBeans基礎上升級的一個分析器,在Java 6的更新版12中第一次發布。多數還沒有更新到Java 6,因此這篇文章主要介紹JConsole。然而,多數技巧和這兩個分析器都有關。
2.遠程連接進程
因為Web應用程序分析工具假設通過一個套接字進行連通性分析,您只需要進行少許配置來設置JConsole(或者是基于JVMTI的分析器,就這點而言),監控/分析遠程運行的應用程序。
如果Tomcat運行在一個名為“webserve”的機器上,且JVM已經啟動了JMX并監聽端口9004,從JConsole(或者任何JMX客戶端)連接它需要一個JMX URL“service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi”。
基本上,要分析一個運行在遠程數據中心的應用程序服務器,您所需要的僅僅是一個JMX URL。
原文轉自:http://www.anti-gravitydesign.com