利用VisualVM监测Azure云服务中的Java应用

在作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

wKiom1YOqLuiTfBpAAJGE9SgyQI964.jpg

能够看到累出了3个本地运行的Java程序,双击pid为19256的tomcat程序,能够看到丰富的选项,例如overview,monitor,thread等:tomcat

wKiom1YOqeHDq2HvAAQmco8Jg7Y442.jpg

wKioL1YOqjnxKOQOAAfnd6H4Ywg632.jpg

wKiom1YOqi_gSN0nAAeHIsnkljQ683.jpg


那么问题来了,当咱们将Java web app部署到Azure Cloud Service之后,如何进行JVM的性能监控昵?一个简单的办法就是利用Cloud service的RDP服务,登录到远程的机器,而后打开本地的VisualVM进行监控,但咱们会发现,虽然咱们的Java应用能够正常访问,但却没法看到Tomcat或者Jetty应用服务器的进程,也没法监控:服务器


wKioL1YP8Xmg8DCYAAKmwwALzj4987.jpg

在本人通过测试,发现最主要的缘由是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。配置云服务远程链接性能


  1. 在Eclipse中打开你的Azure deployment项目,找到package.xml:测试

    wKiom1YRCySBlMpVAALYBTios94243.jpg

  2. 找到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启动行:


    wKioL1YRDHbQgHHQAAFnM5PPpLA166.jpg

    将上述JMX参数添加到Jetty启动参数中

    wKiom1YRDGXRDhAuAAIXy8PK3VI745.jpg

  3. 保存修改,将该项目从新部署到Azure云服务中:

    wKiom1YRDVCDyV2fAAMe2-Ko_bY530.jpg

  4. 经过远程桌面链接到Azure云服务实例中,应用程序通常部署在“E:\approot”下,打开该目录,进入到JDK的bin目录,打开VisualVM:

    wKioL1YRD-CQKZQdAASNDjfvuFg914.jpg

  5. 能够看到目前是看不到Jetty相关的任何信息的,只有VisualVM一个进程,咱们以前部署的Jetty实际上已经开启了JMX,能够做为VisualVM的一个source提供相关的性能数据,那么咱们对VisualVM来作个简单配置,选择“File”-》“Add JMX Connection”:

    wKioL1YREWjgNx5LAAMMQ01C32A381.jpg

  6. 在Connection中输入127.0.0.1:1099(以前配置的端口号),在Display Name中心个你喜欢的名字,好比Jetty,点击ok完成。

    wKioL1YREKOx-ASeAAJyuazx_4I394.jpg

  7. 双击左侧列表中的Jetty,你就能够看到,你已经能够经过JMX监测本地的Java应用了:


    wKioL1YREhCTCuI6AAL41CzNFSM752.jpg

    wKiom1YREgDw200zAAUcyhru5Tk273.jpg

  8. 到此为止,VisualVM已经能够工做了,那么咱们一气呵成,顺便把Java Mission Control和JConsole也一块儿配置了:)一样打开E:\app\JDK_HOME\bin,双击jmc,启动Java Mission Control:

    wKioL1YRE2rACTeyAASehFEFEm8328.jpg单击“Click here to start using。。。。“,开始使用JMC

    wKiom1YREuyQ_NC2AAMV6VNAVIw267.jpg

  9. 一样的道理你能够看到,在jmc中,只能看到已经启动的VisualVM和JMC,看不到Jetty。选择File-connect来进行JMX的配置:

wKiom1YRIACg4qyFAAFs2f9eUhg472.jpg

10. 在出现的主界面,选择”Creat New Connection",进入下一页,在主界面中配置本地port为1099,点击”Test Connection“进行测试,若是一切正常,那么测试状态为OK:

wKioL1YRFtTRIfBcAAFrC7SfY7c385.jpgwKiom1YRFsKTZlO5AAJUtjfVEso519.jpg

11. 点击下一步,在选择中,选择start JMX Console,并点击Finish:

wKioL1YRF3nAJhFJAAFJoLDcArg834.jpg

12. 那么在新的界面中你就可使用JConsole监测你的应用程序,查看各项指标:


wKioL1YRF8_SQg29AAbdk94QVgU337.jpgwKiom1YRF7yj61WiAAU6_clPsn8380.jpg


咱们已经配置了如何在Azure云服务上配置VisulVM和JMC/Jconsole进行Java App的性能监测,能够看到大部分在Windows上可使用的工具同样能够很好的跑在Azure云服务上,而且咱们能够经过RDP方便的进行监测。

相关文章
相关标签/搜索