現(xiàn)實企業(yè)級 Java 開發(fā)中,有時候我們會碰到下面這些問題:
OutOfMemoryError般卑,內(nèi)存不足
內(nèi)存泄露
線程死鎖
鎖爭用(Lock Contention)
Java 進(jìn)程消耗 CPU 過高
jvm 有著非常棒的小塊內(nèi)存虛擬化技術(shù)武鲁,這會讓你產(chǎn)生一種擁有無限內(nèi)存的錯覺感,其實它的開銷非常大蝠检。有時候jvm 需要找出此刻堆上數(shù)據(jù)是如何被使用的沐鼠,并把剩余的空間擴(kuò)大——這就是垃圾回收。產(chǎn)生這種情況的原因是叹谁,jvm 實際獲得的物理內(nèi)存是有限的饲梭,因此需要在不被使用時進(jìn)行內(nèi)存回收和復(fù)用。在一
些時間敏感的應(yīng)用中焰檩,比如交易系統(tǒng)和通信程序憔涉,這些暫停是不能容忍的。有很多 GC 調(diào)優(yōu)方法可以避免這種暫停發(fā)生析苫。貌似上面的討論已經(jīng)跑題了兜叨。讓 GC 變少的
方法當(dāng)然是盡量減少分配內(nèi)存。
有時候衩侥,你希望找出在你的程序中哪些地方導(dǎo)致了內(nèi)存分配的壓力国旷。引起這種壓力的原因有很多種。最普通的一種情況可能是jvm需要經(jīng)常GC茫死,并且時間遠(yuǎn)超過你認(rèn)為的合理值跪但。
這些問題在日常開發(fā)中可能被很多人忽視(比如有的人遇到上面的問題只是重啟服務(wù)器或者調(diào)大內(nèi)存,而不會深究問題根源)峦萎,跟蹤 Java 應(yīng)用程序瓶頸來源一直以來都是很麻煩的特漩。當(dāng)應(yīng)用程序性能受到損害時吧雹,我們必須要通過一些方法來定位問題的所在,剔除安全隱患涂身,下面就介紹一些可以幫助我我們監(jiān)控 Java 信息圖形化工具雄卷。
一、JConsole
1蛤售、簡介
JConsole 是一個內(nèi)置 Java 性能分析器丁鹉,可以從命令行或在 GUI shell 中運行,從 Java 5 開始 引入了 JConsole悴能。您可以輕松地使用 JConsole揣钦、來監(jiān)控 Java 應(yīng)用程序性能和跟蹤 Java 中的代碼。
使 JDK 在 PATH 上漠酿,運行 jconsole 即可冯凹。當(dāng)分析工具彈出時(取決于正在運行的 Java 版本以及正在運行的 Java 程序數(shù)量),可能會出現(xiàn)一個對話框炒嘲,要求輸入一個進(jìn)程的 URL 來連接宇姚,也可能列出許多不同的本地 Java 進(jìn)程(有時包含 JConsole 進(jìn)程本身)來連接。如圖所示:
想分析哪個程序就雙擊哪個進(jìn)程夫凸,然后選擇”insercure“就會連接上了浑劳。
2、設(shè)置 JAVA 程序運行時可以被 JConsolse 連接分析
本地程序(相對于開啟JConsole的計算機(jī))夭拌,無需設(shè)置任何參數(shù)就可以被本地開啟的JConsole連接(Java SE 6開始無需設(shè)置魔熏,之前還是需要設(shè)置運行時參數(shù) -Dcom.sun.management.jmxremote ,啟動 JMX 服務(wù))
無認(rèn)證連接 (下面的設(shè)置表示:連接的端口為8099鸽扁、無需認(rèn)證就可以被連接)
|
1
2
3
4
5
|
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8099 \
-Dcom.sun.management.jmxremote.authenticate=``false
\
-Dcom.sun.management.jmxremote.ssl=``false
\
-Djava.rmi.server.``hostname``=IP
|
JMX:Java Management Extensions 蒜绽,即 Java 管理擴(kuò)展 , 是一個為應(yīng)用程序、設(shè)備桶现、系統(tǒng)等植入管理功能的框架滓窍。 JMX 可以跨越一系列異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和 網(wǎng)絡(luò)傳輸協(xié)議巩那,靈活的開發(fā)無縫集成的系統(tǒng)吏夯、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用 。
-Dcom.sun.management.jmxremote 可以不加即横,默認(rèn)值是 ture噪生;
-Dcom.sun.management.jmxremote.port 是端口號,隨便設(shè)置一個就可以了东囚;
-Dcom.sun.management.jmxremote.ssl 是否啟動 ssl 連接睹酌,默認(rèn)值是 true嘀倒,沒有配置ssl證書就設(shè)置為 false 也可是訪問丈氓;
-Dcom.sun.management.jmxremote.authenticate 是否啟動身份驗證,默認(rèn)值是 true植兰,默認(rèn)的驗證文件在 ${JAVA_HOME}/jre/lib/management/ 下,可以用 -Dcom.sun.management.jmxremote. access.file 與 -Dcom.sun.management.jmxremote. password.file 來指定配置用戶訪問權(quán)限文件與配置用戶信息的文件位置(包括用戶名和密碼)璃吧,如果不需要配置訪問用戶名及密碼楣导,設(shè)置為 false 就可以了,
jmxremote.access 畜挨、jmxremote.password 這個文件最小權(quán)限要設(shè)置為 600筒繁,組和其它用戶沒有任何權(quán)限,否則會禁止訪問毡咏;
-Djava.rmi.server.hostname 該選項是設(shè)置訪問地址的,必須設(shè)置逮刨,設(shè)置為本機(jī) IP 或 主機(jī)名呕缭,如果設(shè)置為 127.0.0.1,那么遠(yuǎn)程主機(jī)就無法訪問了修己。
詳細(xì)的安全設(shè)置參數(shù)恢总,請參考:http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html#gden
3、JConsole 如何連接遠(yuǎn)程機(jī)器的 JAVA 程序
|
1
2
3
4
5
6
7
8
9
10
|
用法: jconsole [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]
-interval 將更新間隔設(shè)置為 n 秒 (默認(rèn)值為 4 秒)
-notile 初始不平鋪窗口 (對于兩個或多個連接)
-pluginpath 指定 jconsole 用于查找插件的路徑
-version 輸出程序版本
connection = pid || host:port || JMX URL (service:jmx:<協(xié)議>:``//``...)
pid 目標(biāo)進(jìn)程的進(jìn)程 ID
host 遠(yuǎn)程主機(jī)名或 IP 地址
port 遠(yuǎn)程連接的端口號
-J 指定運行 jconsole 的 Java 虛擬機(jī)的輸入?yún)?shù)
|
寫一個簡單的一直運行的 Java 程序箩退,運行在某臺機(jī)器上如 (172.16.100.253)离熏,也可用 Tomcat 測試
|
1
|
java -``cp
. -Dcom.sun.management.jmxremote.port=8099 -Dcom.sun.managent.jmxremote.authenticate=``false
-Dcom.sun.management.jmxremote.ssl=``false
-Djava.rmi.server.``hostname``=172.16.100.253 JConsoleTest
|
在另外一臺機(jī)器上進(jìn)行連接佳谦,也可以直接使用命令:
|
1
|
jconsole 172.16.100.253:8099
|
也可以在已經(jīng)打開的 JConsole 界面操作 連接->新建連接->選擇遠(yuǎn)程進(jìn)程->輸入遠(yuǎn)程主機(jī)IP和端口號->點擊“連接”戴涝,如圖:
然后就會進(jìn)入分析界面:
(1)性能分析
下面說說如何分析,如何使用這六個標(biāo)簽
Overview(概述): Displays overview information about the Java VM and monitored values.
Memory(內(nèi)存): 顯示內(nèi)存使用信息
Threads(線程): 顯示線程使用信息
Classes(類): 顯示類裝載信息
VM Sumary(VM摘要):顯示java VM信息
MBeans: 顯示 MBeans.
(2)概述
概述中將各個時間資源使用情況繪制成圖表顯示钻蔑,不過值得一提的是對著圖點擊右鍵可以保存數(shù)據(jù)到 CSV 文件啥刻,所有圖都可以導(dǎo)成 CVS 文件,以后可以使用其他工具來分析這些數(shù)據(jù)咪笑,可帽。
(3)內(nèi)存
這個比較有價值,參看堆內(nèi)存窗怒,非堆內(nèi)存映跟,內(nèi)存池的狀況總體內(nèi)存的分配和使用情況以及不同的 GC 進(jìn)行垃圾回收的次數(shù)和時間⊙镄椋可以手動進(jìn)行 GC 查看內(nèi)存變化努隙。在分析 JAVA 內(nèi)存問題進(jìn)行調(diào)優(yōu)時候非常有用荸镊,你要學(xué)習(xí) JVM 內(nèi)存模型张惹,之后會發(fā)現(xiàn)這里的每個值都具有意義。 GC 的算法和參數(shù)對性能有顯著的影響德挣,注意垃圾回收次數(shù)、時間绍坝、以及 partial GC 和 full GC勤讽,調(diào)整你所使用的不同 GC 和以及各個 GC 下的參數(shù),然后在這個視圖下觀察妹懒,以得到好的性能。
這里貼一下 Java HotSpot VM garbage collector 下generational GC 的各代的劃分圖:
關(guān)于GC,可以參考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html
(4)線程
左下角顯示所有的活動線程(如果線程過多,可以在下面的過濾欄中輸入字符串過濾出你想要觀察的線程)。點擊某個顯示會顯示這個線程的名稱猜憎、狀態(tài)搔课、阻塞和等待的次數(shù)、堆棧的信息。
統(tǒng)計圖顯示的是線程數(shù)目的峰值(紅色)和當(dāng)前活動的線程(藍(lán)色)偷拔。
另外下面有個按鈕“檢測到死鎖”莲绰,有時候會有用處。
(5)類
這個沒什么可解釋的了栅哀。
(6)VM摘要
這里可以看到震肮,操作系統(tǒng),內(nèi)存留拾,線程等全部信息戳晌,方便我們調(diào)整系統(tǒng)資源的分配。
(7)MBean
這里可以有一些額外的操作痴柔,方便調(diào)試代碼沦偎。
(8)插件
|
1
|
jconsole -pluginpath ``/usr/local/jdk1``.7.0_79``/demo/management/JTop/JTop``.jar
|
|
1
|
JTop 插件在 JDK 的 demo 包中,還有許多其它的樣例咳蔚,該插件的功能一目了然豪嚎。
|
二、Jmc
1谈火、簡介
Oracle 發(fā)布了 Java 7 update 40侈询,該修訂版增加了一些重要的新特性,包括 JVM 監(jiān)控工具糯耍、任務(wù)控制扔字,Java applet 規(guī)則集囊嘉、Web Start 應(yīng)用程序以及大量的 bug 修復(fù)。新增的一個非常好用的工具革为,就是 Java Mission Control(JMC 任務(wù)控制工具) 哗伯。 JRockit Misson Control 用戶應(yīng)該會對 mission control 的很多功能十分熟悉,JRockit 也是一款很棒的工具篷角。Java 任務(wù)控制(JMC)是一個產(chǎn)品時間工具套件焊刹,它的根源是 JRockit JVM 工具。該工具套件的目的是提供不張揚的 Java 監(jiān)控和管理恳蹲,適合在開發(fā)和產(chǎn)品環(huán)境中使用虐块。JMC 與 Java Flight Recorder 一起工作,適用于 HotSpot JVM嘉蕾,用來記錄核心數(shù)據(jù)和事件贺奠。它是一個調(diào)優(yōu)工具,一旦出現(xiàn)問題错忱,這些數(shù)據(jù)就可以用來分析儡率。
該工具套件由三個主要的組件組成:Java 進(jìn)程瀏覽器、JMX 控制臺和 Java Flight 記錄器以清。
Java 進(jìn)程瀏覽器:允許用戶列出并連接到本地和遠(yuǎn)程運行的Java應(yīng)用程序儿普。它能夠使用 Java發(fā)現(xiàn)協(xié)議(JDP)自動地發(fā)現(xiàn)本地和遠(yuǎn)程運行的 Java 進(jìn)程。
JMX 控制臺:能夠通過 JMX 接口管理并監(jiān)控 JDK掷倔。它提供了實時集合眉孩、堆使用情況、CPU 負(fù)載以及其他通過 MBeans 暴露的和在 MBean 服務(wù)器中注冊的信息勒葱。
Java Flight 記錄器:提供了一種從操作系統(tǒng)層浪汪、JVM 和 Java 應(yīng)用程序?qū)邮占录姆绞健J占氖录ň€程延時事件凛虽,例如休眠(sleep)死遭、等待(wait)、鎖競爭凯旋、I/O呀潭、GC 和方法分析。Oracle 估計對大多數(shù)應(yīng)用程序而言運行 Flight 記錄器的性能開銷大約在 2% 左右瓦阐。
2蜗侈、Jmc 使用方法
打開以后界面如下:
Jmc 既可以連接本地 Java 程序篷牌,也可以連接本地 Java 程序睡蟋,遠(yuǎn)端要開啟 jmxremote 訪問。本地程序在左側(cè)想查看的的程序名那里枷颊,右鍵點擊啟動 JMX 控制臺就可以了戳杀。遠(yuǎn)程訪問在左側(cè)空白處右鍵點擊新建連接该面,如圖填寫好主機(jī)和端口,這里的主機(jī)和端口就是我們前面在遠(yuǎn)程服務(wù)器配置的服務(wù)器 IP 和端口信卡。
創(chuàng)建完成之后我們就能看到服務(wù)器的概要信息了隔缀。通過下面的選項卡就可以切換顯示其它的詳細(xì)的信息了。
概覽:
MBean 瀏覽器:
觸發(fā)器:
系統(tǒng):
內(nèi)存:
線程:
診斷命令:
Jmc 還可以安裝一些插件傍菇,增加一些功能猾瘸。所有的功能都可以點擊右上角的 "? " 丢习,會通過瀏覽器訪問本地的幫助文件牵触。
飛行記錄器使用前,需要在 Java 程序啟動前加 2 個參數(shù)“ -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ”咐低,如果沒有添加揽思,無法使用飛行記錄器。飛行記錄器啟動后见擦,可以記錄服務(wù)器一段時間內(nèi)的運行狀況钉汗,還可導(dǎo)成文件備份,需要 Java 程序啟動前在加一個參數(shù)“ -XX:FlightRecorderOptions=defaultrecording=true”才可以導(dǎo)出鲤屡,方便隨時分析损痰,這個是查找服務(wù)器性能的利器。
飛行記錄器記錄成功之后可以看到下面的一些信息:
Jmc 很豐富酒来、很強(qiáng)大徐钠,其他功能可以自行研究。
三役首、VisualVm
1尝丐、簡介
VisualVM 是 Netbeans 的 profile 子項目,自從JDK 6 Update 7以后已經(jīng)作為JDK的一部分(java啟動時不需要特定參數(shù)衡奥,監(jiān)控工具為在${JAVA_HOME}/bin/jvisualvm)爹袁,是一款免費的Java虛擬機(jī)監(jiān)控和性能分析工具。能夠監(jiān)控線程矮固,內(nèi)存情況失息,查看方法的CPU時間和內(nèi)存中的對 象,已被GC的對象档址,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)盹兢。
jvisualvm 從界面上看還是比較簡潔的,左邊是樹形結(jié)構(gòu)守伸,自動顯示當(dāng)前本機(jī)所運行的 Java 程序绎秒,還可以添加遠(yuǎn)程的 Java VM,其中括號里面的 PID 指的是進(jìn)程 ID尼摹。OverView 界面顯示 VM 啟動參數(shù)以及該 VM 對應(yīng)的一些屬性见芹。Monitor 界面則是監(jiān)控 Java 堆大小剂娄,Permgen 大小,Classes 和線程數(shù)量玄呛。
該工具提供了一個圖形界面窗口阅懦,并且可以直觀的了解Java應(yīng)用程序的運行時信息。jvisualvm 集成了許多工具徘铝,比如像 jmp耳胎、jinfo、jstat惕它、jstack场晶、JConsole 等。它通過 jvmstat怠缸、JMX诗轻、SA(Serviceability Agent)以及 Attach API 等多種方式從程序運行時獲得實時數(shù)據(jù),從而進(jìn)行動態(tài)的性能分析揭北。同時扳炬,它能自動選擇更快更輕量級的技術(shù)盡量減少性能分析對應(yīng)用程序造成的影響,提高性能分析的精度搔体。
2恨樟、安裝插件并啟動 Java VisualVM
配置好 JDK 環(huán)境變量,執(zhí)行 jvisualvm 就可以打開軟件了疚俱,在 VisualVM 插件中心安裝插件安裝步驟如下 :
從主菜單中選擇“工具”>“插件”劝术,在“可用插件”標(biāo)簽中,選中該插件的“安裝”復(fù)選框呆奕。單擊“安裝”养晋,逐步完成插件安裝程序。這些插件都是 .nbm 文件梁钾,也可以提前下好绳泉,在已下載標(biāo)簽中點擊“添加插件按鈕”,選擇已下載的插件文件 (.nbm) 并打開姆泻,逐步完成插件安裝程序零酪。
安裝好插件后,相應(yīng)的功能就可以使用了拇勃。
3四苇、通過 Java VisualVM 連接到服務(wù)器監(jiān)控 Java 程序
監(jiān)控本地進(jìn)程,雙擊左側(cè)本地下邊的進(jìn)程名字就可以查看監(jiān)控信息了方咆。
接下來就是遠(yuǎn)程監(jiān)控 Java 程序了月腋,默認(rèn)是使用 Jstatd 連接到遠(yuǎn)程主機(jī)的,所以在遠(yuǎn)程主機(jī)上,必須要一直運行著 jstatd 守護(hù)程序罗售,啟動方法可以參考上一篇文章辜窑。
右鍵點擊遠(yuǎn)程-添加遠(yuǎn)程主機(jī)-輸入主機(jī)ip地址钩述,確認(rèn)提交后即可看到相應(yīng)的遠(yuǎn)程主機(jī)和在上面運行的 Java 程序寨躁,連接成功后應(yīng)該會顯示 Jstatd 及其 PID。
通過以上方式連接服務(wù)器發(fā)現(xiàn)一個問題牙勘,不能監(jiān)控 CPU 职恳,提示不受此 JVM 支持,所以我們還是要使用 JMX 方式來連接遠(yuǎn)程主機(jī)方面,如果遠(yuǎn)端服務(wù)開啟了 JMX放钦,只需在遠(yuǎn)程主機(jī)那里右鍵添加一個 JMX 連接就可以了。連接成功恭金,現(xiàn)在我們可以遠(yuǎn)程監(jiān)控服務(wù)器性能操禀。
在上圖中可以看到cpu利用率和垃圾回收活動(這個在分析tomcat性能時也很重要)。然后是堆棧使用情況横腿。下面是類的使用情況颓屑,最后一個是線程活動情況。
點擊線程標(biāo)簽可以看到:
上圖可以非常清晰的看到線程活動情況耿焊,那些線程正在執(zhí)行揪惦,哪些線程正在等待中,以及執(zhí)行完畢的線程等罗侯。JDK 1.7 中的這個工具線程監(jiān)控頁面功能減少了器腋,只剩時間線了(Timeline),JDK 1.6 內(nèi)置的工具钩杰,還表(tab)纫塌、詳細(xì)信息(Details)功能,可以右鍵選擇查看單個進(jìn)程的詳細(xì)的狀態(tài)信息讲弄。部分監(jiān)控頁還可以 Dump 出來狀態(tài)文件保存下來护戳,然后分析,如將 Heap Dump 出的遠(yuǎn)程文件 *.hprof 垂睬,拷貝到本地導(dǎo)入后分析媳荒。
加載后的 Dump 分析:
這可是一個性能分析利器哦!暫時就介紹這些功能驹饺。
四钳枕、JProfiler
1、簡介
JProfiler 是一個商業(yè)授權(quán)的 Java 剖析工具赏壹,主要用于檢查和跟蹤系統(tǒng)(限于Java開發(fā)的)的性能的工具鱼炒,它是德國 ej-technologies 公司開發(fā)的一款全功能的 Java 剖析工具(profiler),專用于分析 J2SE 和 J2EE 應(yīng)用程序蝌借。它把CPU昔瞧、執(zhí)行緒和內(nèi)存的剖析組合在一個強(qiáng)大的應(yīng)用中指蚁。 JProfiler 可提供許多 IDE 整合和應(yīng)用服務(wù)器整合用途。JProfiler 直覺式的 GUI 讓你可以找到效能瓶頸自晰、抓出內(nèi)存漏失(memory leaks)凝化、并解決執(zhí)行緒的問題。它讓你得以對 heap walker 作資源回收器的 root analysis酬荞,可以輕易找出內(nèi)存漏失搓劫;heap 快照(snapshot)模式讓未被參照(reference)的對象、稍微被參照的對象混巧、或在終結(jié)(finalization)隊列的對象都會被移除枪向;整合精靈以便剖析瀏覽器的 Java 外掛功能。
2咧党、安裝
下載地址:http://www.ej-technologies.com/download/jprofiler/files 目前最新版是 Version: 9.0.3 (2015-09-16)
這里使用 Version:8.0.7 版本來演示安裝秘蛔,低版本的功能已經(jīng)滿足我的的需求了,而且也破解也方便傍衡。對與 Linux 系統(tǒng)深员,官網(wǎng)提供了 3 種 安裝文件,分別是 Setup Executable聪舒、RPM 和 TAR.GZ辨液,我這里下載的是 Setup Executable 版本,直接執(zhí)行就可以安裝了箱残。
|
1
2
3
|
wget http:``//download-aws``.ej-technologies.com``/jprofiler/jprofiler_linux_8_0_7``.sh
chmod
+x jprofiler_linux_8_0_7.sh
.``/jprofiler_linux_8_0_7``.sh -c
|
按照提示來安裝就可以了滔迈,提示都很簡單,不在多說被辑,默認(rèn)安裝路徑在 /opt/jprofiler8 下燎悍。
注意,這里的 -c 意思是用字符方式來安裝盼理,默認(rèn)是以圖形化方式安裝的谈山。
3、配置使用
(1)運行 JProfiler宏怔,第一次打開會有向?qū)ё嗦罚雎运?/p>
(2)選擇 Session->Integration Wizard->New Remote Integratation;
也可以選擇其它幾個連接方式也可以臊诊,按照向?qū)б徊揭徊讲僮骶涂梢粤恕?/p>
(3) 選擇 On a remote computer鸽粉;Platform of remote computer 選擇 Linux x86/AMD 64;
(4)選擇服務(wù)器的 JDK 環(huán)境抓艳,這里是:Sun触机,1.7.0,hotspot;
服務(wù)器上可能安裝了多個 JAVA 版本儡首,所選的 JVM 提供商和版本片任,一定要選應(yīng)用程序啟動時所用的。
(5)選擇啟動模式:這里選第一種 wait for a connection from the jprofiler GUI蔬胯;
關(guān)于上邊顯示的3個選項做一下說明:
Wait for a connection from the Jprofiler GUI对供,此模式為,在啟動 Java 程序時笔宿,需要等 Jprofiler 連接后才能啟動犁钟,開發(fā)人員經(jīng)常使用此項棱诱;
Startup immediately泼橘,connect later with the JProfiler GUI,此模式下迈勋, Java 程序獨立啟動炬灭,Jprofiler 隨時可以連接;
Profile offline靡菇,JProfiler GUI cannot connect重归,此模式為離線模式,生成相關(guān)記錄文件事后分析厦凤;
(6)輸入遠(yuǎn)程服務(wù)器 IP鼻吮;
(7)輸入遠(yuǎn)程服務(wù)器上的 JProfiler 的安裝路徑,如 /opt/jprofiler8较鼓;
在連接遠(yuǎn)程機(jī)器時椎木,遠(yuǎn)程機(jī)器也是需要安裝 JProfiler 的,2個 JProfiler 版本要保持一致博烂。
(8)會提示 JProfiler 的端口香椎,默認(rèn)是 8849,可以不用修改禽篱,直接下一步就可以了畜伐;
(9)這里會列出需要在服務(wù)器端做的配置;
將上述參數(shù) -agentpath:/opt/jprofiler8/bin/linux-x64/libjprofilerti.so=port=8849 添加到遠(yuǎn)程主機(jī)的啟動參數(shù)中躺率,如監(jiān)控 Tomcat 服務(wù)玛界,添加到 $CATALINA_OPTS 中,啟動服務(wù)時悼吱,在日志中可以看到慎框,系統(tǒng)會一直處于等待狀態(tài),直到 JProfiler 連接上Tomcat舆绎,程序才會繼續(xù)進(jìn)行鲤脏。
|
1
2
3
4
5
6
7
8
9
10
11
|
JProfiler> Protocol version 39
JProfiler> Using JVMTI
JProfiler> JVMTI version 1.1 detected.
JProfiler> 64-bit library
JProfiler> Listening on port: 8849.
JProfiler> Instrumenting native methods.
JProfiler> Can retransform classes.
JProfiler> Can retransform any class.
JProfiler> Native library initialized
JProfiler> VM initialized
JProfiler> Waiting ``for
a connection from the JProfiler GUI ...
|
(10)啟動 JProfiler 查看監(jiān)控數(shù)據(jù)
點擊 JProfiler 菜單 session>start center>Open Session
Available session configurations中列出了剛才配置的連接,選中使用就OK了!
Initial Profiling Settings 選擇默認(rèn)的猎醇,一般我們都是要查看所有項窥突。
JProfiler 可以通過時時的監(jiān)控系統(tǒng)的內(nèi)存使用情況,隨時監(jiān)視垃圾回收硫嘶,線程運行狀況等手段阻问,從而很好的監(jiān)視 JVM 運行情況及其性能。
4沦疾、破解注冊
JProfiler8 注冊碼序列號
按默認(rèn)選擇“Single or evaluation license”
Name 和 Company 隨意
————————————————————–
L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620
L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257
L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038
L-Larry_Lau@163.com#99016-hli5ay1ylizjj#27215
L-Larry_Lau@163.com#40775-3wle0g1uin5c1#0674
————————————————————–
L-Larry_Lau@163.com#7009-14frku31ynzpfr#20176
L-Larry_Lau@163.com#49604-1jfe58we9gyb6#5814
L-Larry_Lau@163.com#25531-1qcev4yintqkj#23927
L-Larry_Lau@163.com#96496-1qsu1lb1jz7g8w#23479
L-Larry_Lau@163.com#20948-11amlvg181cw0p#171159
注冊碼前面的郵箱部分為注冊郵箱称近,破解后,就不限制使用時間了哮塞。
5刨秆、IDE 集成
JProfiler 還可以和 IDE 工具集成,邊調(diào)試代碼忆畅,邊查看系統(tǒng)運行情況衡未。當(dāng) JProfiler 與 IDE (eclipse)集成后,不需要配session家凯,可以直接在 IDE 中調(diào)用缓醋。安裝前關(guān)閉 eclipse,按照安裝向?qū)нM(jìn)行就可以了绊诲。
JProfiler 監(jiān)控要占用一定的系統(tǒng)資源送粱,所以一般情況下不要用于性能測試。實際操作中掂之,最好有開發(fā)人員來觀察分析視圖抗俄,跟蹤具體的代碼問題,從而針對性的修改某部分代碼板惑,優(yōu)化程序橄镜。JProfiler 功能很多,這里就不細(xì)說了冯乘,在使用過程中洽胶,一點一點摸索吧。