在作Java開發的時候,咱們須要在上線以前對程序進行壓力測試,對程序的性能進行全面的監控,瞭解JVM的CPU,內存,GC,classes,線程等等信息,或者在程序上線運行的過程中以便於診斷問題或者對程序作出優化,市面上作Java profiling的工具也比較多,好比商業的JProfiler,JClarity等,也有免費的JDK自帶的工具,如VisualVM,JConsole,JMC等等,那麼當咱們將Java應用程序部署到了Azure Cloud Service中,如何利用這些工具作性能監控和調優暱?本文以Oracle JDK 1.8自帶的VisualVM和JMC來作例子。ios
咱們先來看看VisualVM在本地運行的效果,個人本次測試環境啓動了Eclipse,Tomcat等應用,進入你的Java安裝目錄,打開bin文件夾,找到jvisualvm程序,並打開可看到主界面,已經發現了本地運行的Java程序:web
能夠看到累出了3個本地運行的Java程序,雙擊pid爲19256的tomcat程序,能夠看到豐富的選項,例如overview,monitor,thread等:tomcat
那麼問題來了,當咱們將Java web app部署到Azure Cloud Service之後,如何進行JVM的性能監控暱?一個簡單的辦法就是利用Cloud service的RDP服務,登錄到遠程的機器,而後打開本地的VisualVM進行監控,但咱們會發現,雖然咱們的Java應用能夠正常訪問,但卻沒法看到Tomcat或者Jetty應用服務器的進程,也沒法監控:服務器
在本人通過測試,發現最主要的緣由是Cloud Service在啓動Jetty的時候,將Java做爲後臺程序運行,因此用VisualVM在Cloud Service的本地實例中也沒法檢測。VisualVM獲取JVM數據有兩種方式,JMX或者jstat,在將Java App部署在雲服務中後,須要你顯式的指定JMX參數開啓服務,而後才能夠監測,如下是step by step的步驟:app
本文假定你已經數量掌握:ide
A。將Java App部署到Azure雲服務(http://cloudapps.blog.51cto.com/3136598/1699880) 工具
B。配置雲服務遠程鏈接性能
在Eclipse中打開你的Azure deployment項目,找到package.xml:測試
找到Jetty啓動行,在Java start以後添加添加JMX參數:優化
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1099(該端口可本身定義)
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
找到Jetty啓動行:
將上述JMX參數添加到Jetty啓動參數中
保存修改,將該項目從新部署到Azure雲服務中:
經過遠程桌面鏈接到Azure雲服務實例中,應用程序通常部署在「E:\approot」下,打開該目錄,進入到JDK的bin目錄,打開VisualVM:
能夠看到目前是看不到Jetty相關的任何信息的,只有VisualVM一個進程,咱們以前部署的Jetty實際上已經開啓了JMX,能夠做爲VisualVM的一個source提供相關的性能數據,那麼咱們對VisualVM來作個簡單配置,選擇「File」-》「Add JMX Connection」:
在Connection中輸入127.0.0.1:1099(以前配置的端口號),在Display Name中心個你喜歡的名字,好比Jetty,點擊ok完成。
雙擊左側列表中的Jetty,你就能夠看到,你已經能夠經過JMX監測本地的Java應用了:
到此爲止,VisualVM已經能夠工做了,那麼咱們一氣呵成,順便把Java Mission Control和JConsole也一塊兒配置了:)一樣打開E:\app\JDK_HOME\bin,雙擊jmc,啓動Java Mission Control:
一樣的道理你能夠看到,在jmc中,只能看到已經啓動的VisualVM和JMC,看不到Jetty。選擇File-connect來進行JMX的配置:
10. 在出現的主界面,選擇」Creat New Connection",進入下一頁,在主界面中配置本地port爲1099,點擊」Test Connection「進行測試,若是一切正常,那麼測試狀態爲OK:
11. 點擊下一步,在選擇中,選擇start JMX Console,並點擊Finish:
12. 那麼在新的界面中你就可使用JConsole監測你的應用程序,查看各項指標:
咱們已經配置瞭如何在Azure雲服務上配置VisulVM和JMC/Jconsole進行Java App的性能監測,能夠看到大部分在Windows上可使用的工具同樣能夠很好的跑在Azure雲服務上,而且咱們能夠經過RDP方便的進行監測。