這篇文章主要為大家展示了“Java性能監(jiān)控的小技巧有哪些”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Java性能監(jiān)控的小技巧有哪些”這篇文章吧。

創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為廣靈等服務(wù)建站,廣靈等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為廣靈企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
1.遠(yuǎn)程連接進(jìn)程
因?yàn)閃eb應(yīng)用程序分析工具假設(shè)通過(guò)一個(gè)套接字進(jìn)行連通性分析,您只需要進(jìn)行少許配置來(lái)設(shè)置JConsole(或者是基于JVMTI的分析器,就這點(diǎn)而言),監(jiān)控/分析遠(yuǎn)程運(yùn)行的應(yīng)用程序。
如果Tomcat運(yùn)行在一個(gè)名為“webserve”的機(jī)器上,且JVM已經(jīng)啟動(dòng)了JMX并監(jiān)聽(tīng)端口9004,從JConsole(或者任何JMX客戶端)連接它需要一個(gè)JMX URL“service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi”。
基本上,要分析一個(gè)運(yùn)行在遠(yuǎn)程數(shù)據(jù)中心的應(yīng)用程序服務(wù)器,您所需要的僅僅是一個(gè)JMX URL。
2.JDK附帶分析器
許多開(kāi)發(fā)人員沒(méi)有意識(shí)到從Java 5開(kāi)始JDK中包含了一個(gè)分析器。JConsole(或者Java平臺(tái)***版本,VisualVM)是一個(gè)內(nèi)置分析器,它同Java編譯器一樣容易啟動(dòng)。如果是從命令行啟動(dòng),使JDK在PATH上,運(yùn)行jconsole即可。如果從GUIshell啟動(dòng),找到JDK安裝路徑,打開(kāi)bin文件夾,雙擊jconsole。
當(dāng)分析工具彈出時(shí)(取決于正在運(yùn)行的Java版本以及正在運(yùn)行的Java程序數(shù)量),可能會(huì)出現(xiàn)一個(gè)對(duì)話框,要求輸入一個(gè)進(jìn)程的URL來(lái)連接,也可能列出許多不同的本地Java進(jìn)程(有時(shí)包含JConsole進(jìn)程本身)來(lái)連接。
使用JConsole進(jìn)行工作
在Java 5中,Java進(jìn)程并不是被設(shè)置為默認(rèn)分析的,而是通過(guò)一個(gè)命令行參數(shù)—-Dcom.sun.management.jmxremote——在啟動(dòng)時(shí)告訴Java 5 VM打開(kāi)連接,以便分析器可以找到它們;當(dāng)進(jìn)程被JConsole撿起時(shí),您只能雙擊它開(kāi)始分析。
分析器有自己的開(kāi)銷(xiāo),因此***的辦法就是花點(diǎn)時(shí)間來(lái)弄清是什么開(kāi)銷(xiāo)。發(fā)現(xiàn)JConsole開(kāi)銷(xiāo)最簡(jiǎn)單的辦法是,首先獨(dú)自運(yùn)行一個(gè)應(yīng)用程序,然后在分析器下運(yùn)行,并測(cè)量差異。(應(yīng)用程序不能太大或者太小;我最喜歡使用JDK附帶的SwingSet2樣本。)因此,我使用-verbose:gc嘗試運(yùn)行SwingSet2來(lái)查看垃圾收集清理,然后運(yùn)行同一個(gè)應(yīng)用程序并將JConsole分析器連接到它。當(dāng)JConsole連接好了之后,一個(gè)穩(wěn)定的GC清理流出現(xiàn),否則不會(huì)出現(xiàn)。這就是分析器的性能開(kāi)銷(xiāo)。
JConsole或VisualVM?
JConsole從Java 5開(kāi)始就隨著Java平臺(tái)版本一起發(fā)布,而VisualVM是在NetBeans基礎(chǔ)上升級(jí)的一個(gè)分析器,在Java 6的更新版12中***次發(fā)布。多數(shù)還沒(méi)有更新到Java 6,因此這篇文章主要介紹JConsole。然而,多數(shù)技巧和這兩個(gè)分析器都有關(guān)。
3.跟蹤統(tǒng)計(jì)
JConsole有許多對(duì)收集統(tǒng)計(jì)數(shù)據(jù)有用的選項(xiàng)卡,包括:
Memory:在JVM垃圾收集器中針對(duì)各個(gè)堆跟蹤活動(dòng)。
Threads:在目標(biāo)JVM中檢查當(dāng)前線程活動(dòng)。
Classes:觀察VM已加載類的總數(shù)。
這些選項(xiàng)卡(和相關(guān)的圖表)都是由每個(gè)Java 5及更高版本VM在JMX服務(wù)器上注冊(cè)的JMX對(duì)象提供的,是內(nèi)置到JVM的。一個(gè)給定JVM中可用bean的完整清單在MBeans選項(xiàng)卡上列出,包括一些元數(shù)據(jù)和一個(gè)有限的用戶界面來(lái)查看數(shù)據(jù)或執(zhí)行操作。(然而,注冊(cè)通知是在JConsole用戶界面之外。)
使用統(tǒng)計(jì)數(shù)據(jù)
假設(shè)一個(gè)Tomcat進(jìn)程死于OutOfMemoryError。如果您想要弄清楚發(fā)生了什么,打開(kāi)JConsole,單擊Classes選項(xiàng)卡,過(guò)一段時(shí)間查看一次類計(jì)數(shù)。如果數(shù)量穩(wěn)定上升,您可以假設(shè)應(yīng)用程序服務(wù)器或者您的代碼某個(gè)地方有一個(gè)ClassLoader漏洞,不久之后將耗盡PermGen空間。如果需要更進(jìn)一步的確認(rèn)問(wèn)題,請(qǐng)看Memory選項(xiàng)卡。
不要成為典型
發(fā)現(xiàn)應(yīng)用程序代碼中性能問(wèn)題的常用響應(yīng)多種多樣,但也是可預(yù)測(cè)的。早期的Java編程人員對(duì)舊的IDE可能十分生氣,并開(kāi)始進(jìn)行代碼庫(kù)中主要部分的代碼復(fù)查,在源代碼中尋找熟悉的“紅色標(biāo)志”,像異步塊、對(duì)象配額等等。隨著編程經(jīng)驗(yàn)的增加,開(kāi)發(fā)人員可能會(huì)仔細(xì)研究JVM支持的-X標(biāo)志,尋找優(yōu)化垃圾收集器的方法。當(dāng)然,對(duì)于新手,直接去Google查詢,希望有其他人發(fā)現(xiàn)了JVM的神奇的“make it go fast”轉(zhuǎn)換,避免重寫(xiě)代碼。
從本質(zhì)上來(lái)說(shuō),這些方法沒(méi)什么錯(cuò),但都是有風(fēng)險(xiǎn)的。對(duì)于一個(gè)性能問(wèn)題最有效的響應(yīng)就是使用一個(gè)分析器——現(xiàn)在它們內(nèi)置在Java平臺(tái),我們確實(shí)沒(méi)有理由不這樣做!
4.JConsole并不是高深莫測(cè)的
作為一個(gè)分析器實(shí)用工具,JConsole是極好的,但是還有更好的工具。一些分析插件附帶分析器或者靈巧的用戶界面,默認(rèn)情況下比JConsole跟蹤更多的數(shù)據(jù)。
JConsole真正吸引人的是整個(gè)程序是用“普通舊式Java”編寫(xiě)的,這意味著任何Java開(kāi)發(fā)人員都可以編寫(xiě)這樣一個(gè)實(shí)用工具。事實(shí)上,JDK其中甚至包括如何通過(guò)創(chuàng)建一個(gè)插件來(lái)定制JConsole的示例。建立在NetBeans頂部的VisualVM進(jìn)一步延伸了插件概念。
如果JConsole(或者VisualVM,或者其他任何工具)不符合您的需求,或者不能跟蹤您想要跟蹤的,或者不能按照您的方式跟蹤,您可以編寫(xiě)屬于自己的工具。如果您覺(jué)得Java代碼很麻煩,Groovy或JRuby或很多其他JVM語(yǔ)言都可以幫助您更快完成。
您真正需要的是一個(gè)快速而粗糙(quick-and-dirty)的由JVM連接的命令行工具,可以以您想要的方式確切地跟蹤您感興趣的數(shù)據(jù)。
5.為離線分析創(chuàng)建一個(gè)堆轉(zhuǎn)儲(chǔ)
生產(chǎn)環(huán)境中一切都在快速地進(jìn)行著,您可能沒(méi)有時(shí)間花費(fèi)在您的應(yīng)用程序分析器上,相反地,您可以為Java環(huán)境中的每個(gè)事件照一個(gè)快照保存下來(lái)過(guò)后再看。在JConsole中您也可以這樣做,在VisualVM中甚至?xí)龅酶谩?/p>
先找到MBeans選項(xiàng)卡,在其中打開(kāi)com.sun.management節(jié)點(diǎn),接著是HotSpotDiagnostic節(jié)點(diǎn)。現(xiàn)在,選擇Operations,注意右邊面板中的“dumpHeap”按鈕。如果您在***個(gè)(“字符串”)輸入框中向dumpHeap傳遞一個(gè)文件名來(lái)轉(zhuǎn)儲(chǔ),它將為整個(gè)JVM堆照一個(gè)快照,并將其轉(zhuǎn)儲(chǔ)到那個(gè)文件。
稍后,您可以使用各種不同的商業(yè)分析器來(lái)分析文件,或者使用VisualVM分析快照。(記住,VisualVM是在Java 6中可用的,且是單獨(dú)下載的。)
以上是“Java性能監(jiān)控的小技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)題目:Java性能監(jiān)控的小技巧有哪些
本文路徑:http://chinadenli.net/article48/phojep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、Google、App設(shè)計(jì)、域名注冊(cè)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)