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

个本地运行的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)

B。配置云服务远程连接

 

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

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

     

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

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

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

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

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

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

     

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

    单击"Click here to start using。。。。",开始使用JMC

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

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

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

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

     

     

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

利用VisualVM监测Azure云服务中的Java应用的更多相关文章

  1. Azure 云服务中的实例端点

    Azure云服务(cloud Servive)中有三种端点类型(endpoint type):输入端点(input);内部端点(internal);实例端点(InstanceInput) 1.输入端点 ...

  2. 【Azure 云服务】如何从Azure Cloud Service中获取项目的部署文件

    问题描述 在历史已经部署的云服务(Azure Cloud Service)中,如何获取到项目在很久以前的部署包文件呢? 解决办法 1)如果部署云服务是通过门户上传部署包到存储账号中,则可以直接从存储账 ...

  3. 【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等

    什么是 PaaS?Platform as a Service 平台即服务 (PaaS) 是云中的完整开发和部署环境,你可以使用其中资源交付内容,从基于云的简单应用到启用云的复杂企业应用程序皆可.你以即 ...

  4. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)

    问题描述 把Web Role服务发布到Azure Cloud Service后,需要在IIS的输出日志中,把每一个请求的HTTP Request Header中的User-Agent内容也输出到日志中 ...

  5. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  6. 调试 Azure 云服务项目的方法

    调试 Azure 云服务项目 在菜单栏中选择“调试”>“启动调试”(键盘操作:F5). 重要提示 如果未将 Azure 云服务项目设置为启动项目,当你单击按钮以触发断点时,将出现以下错误:“外部 ...

  7. 面向阿里云专家的 Azure 云服务介绍

    本文是面向阿里云专家的 Azure 云服务介绍,参考本文可以帮助大家“按图索骥”在 Azure 的平台上找到能满足自己需求的服务. 在公有云计算蓬勃发展的同时,中国也出现了越来越多的本土公有云平台.针 ...

  8. Azure云服务托管恶意软件

    微软Azure云服务被用于托管恶意软件,可控制多达90台电脑 BleepingComputer称,在早期报道中,5月份陆续出现了两起与Azure相关的恶意软件攻击事件: 1.自5月10日以来,Azur ...

  9. 【Azure 云服务】Azure Cloud Service在发布新部署后遇见不能RDP(远程连接)到实例时如何处理?

    Azure 云服务是PaaS 的一个示例. 与 Azure 应用服务一样,此技术设计用于支持可缩放.可靠且运营成本低廉的应用程序. 同样,应用服务托管在虚拟机 (VM) 上,Azure 云服务也是如此 ...

随机推荐

  1. [转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)

    原文作者:淘长源 原文连接:http://qing.blog.sina.com.cn/1757661907/68c3cad333002qhe.html 转载注明以上信息   MySQL 5.6 的新特 ...

  2. C指针数组

    #include<stdio.h> #include<stdlib.h> int main(void) { char const *str[] = { "this i ...

  3. ViewBag、ViewData和TempData使用方法、区别与联系

    一.区别与联系 ViewData 和 TempData 都可以传递弱类型数据,区别如下:TempData 只在当前 Action 中有效,生命周期和 View 相同:保存在Session中,Contr ...

  4. nc命令总结

    1.远程拷贝文件从server1拷贝文件到server2上.需要先在server2上,用nc激活监听,server2上运行: 引用 [root@hatest2 tmp]# nc -l 1234 > ...

  5. Roy the Robber

    Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that th ...

  6. Js 中常用方法

    一.获取唯一值(2014-12-23) function newGuid() { var guid = ""; var n = (((1 + Math.random()) * 0x ...

  7. log4net 使用与配置 每天一份log文件

    1.下载 或 在nuget安装 log4net 2. web.config (app.config) <configuration> <configSections> < ...

  8. [bzoj2301: [HAOI2011]Problem b] 乞讨

    </pre><pre code_snippet_id="507886" snippet_file_name="blog_20141104_2_53831 ...

  9. Reflux 使用教程

    Reflux是根据React的flux创建的单向数据流类库.Reflux的单向数据流模式主要由actions和stores组成.例如,当组件list新增item时,会调用actions的某个方法(如a ...

  10. Unity 梯子生成算法

    Unity之生成梯子算法的实现. 1.通过预制物体动态生成角度可设置的梯子形状. 1.1 主要涉及到的数学知识点,角度与弧度的转化. 弧度=角度乘以π后再除以180 角度=弧度除以π再乘以180 1. ...