首页 技术 正文
技术 2022年11月16日
0 收藏 917 点赞 4,359 浏览 2021 个字

在做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程序:

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

个本地运行的Java程序,双击pid为19256的tomcat程序,可以看到丰富的选项,例如overview,monitor,thread等:

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

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

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

 

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

 

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

在本人经过测试,发现最主要的原因是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)

B。配置云服务远程连接

 

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

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

  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启动行:

     

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

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

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

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

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

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

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

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

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

  6. (之前配置的端口号),在Display Name中心个你喜欢的名字,比如Jetty,点击ok完成。

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

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

     

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

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

  8. 到此为止,VisualVM已经可以工作了,那么我们一鼓作气,顺便把Java Mission Control和JConsole也一起配置了:)同样打开E:\app\JDK_HOME\bin,双击jmc,启动Java Mission Control:

    利用VisualVM监测Azure云服务中的Java应用单击”Click here to start using。。。。”,开始使用JMC

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

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

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

    ,点击”Test Connection”进行测试,如果一切正常,那么测试状态为OK:

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

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

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

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

     

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

     

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,486
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,126
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,287