利用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来做例子。
我们先来看看VisualVM在本地运行的效果,我的本次测试环境启动了Eclipse,Tomcat等应用,进入你的Java安装目录,打开bin文件夹,找到jvisualvm程序,并打开可看到主界面,已经发现了本地运行的Java程序:
可以看到累出了3个本地运行的Java程序,双击pid为19256的tomcat程序,可以看到丰富的选项,例如overview,monitor,thread等:
那么问题来了,当我们将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的步骤:
本文假定你已经数量掌握:
A。将Java App部署到Azure云服务(http://cloudapps.blog.51cto.com/3136598/1699880)
-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1099(该端口可自己定义)
-Dcom.sun.management.jmxremote.ssl=false
11. 点击下一步,在选择中,选择start JMX Console,并点击Finish:
posted on 2015-11-25 23:04 StevenLian 阅读(351) 评论(0) 编辑 收藏 举报