java jmx promth_(转)用JMX监测JVM的运行参数

用JMX管理你的JVM

JMX是Java管理扩展的缩写,也是当前Java技术中很核心的一块,JMX使得构建可扩展、可管理、伸缩性好的Java框架变得更加容易。更重要的是,JMX是J2SE的一部分,也就是说,使用JMX还能获得很好的兼容性,因为它是标准Java的一部分

说了这些,也许你对JMX的重要性还是没有很直观的认识,那么当你知道最普及的servlet容器tomcat、大名鼎鼎的开源服务器JBOSS,都是完全基于JMX的,甚至连大部分商用的应用服务器如weblogic,都采用JMX作为其管理平台的实现时,你还会怀疑JMX的重要性吗。还是半信半疑?OK,就连与你朝夕相处的JVM,都是基于JMX架构的!本文就是介绍关于如何用JMX对你的JVM进行管理

1.设置环境变量

可以在命令行以java -Dproperty=value的形式设置环境变量,不过这样只会对当前命令行窗口有效;或者修改操作系统的环境变量

在以前的Java中,要想利用JMX管理某个JVM应用,必须加上com.sun.management.jmxremote这个系统变量,以告之JVM开放特定端口和协议用于管理。但是Java6已经默认支持JMX了,也就是说:

在过去的Java版本中,假设你要运行Notepad这个程序,必须这么做:

% cd JDK_HOME/demo/jfc/Notepad

% java -Dcom.sun.management.jmxremote -jar Notepad.jar

而在Java6中,只需敲入% java -jar Notepad.jar 即可,接下来任意JMX兼容的客户端都可以连接到这个应用进行管理,实现所谓的out-of-the-box管理。(在Windows系统中,出于安全原因,如果要进行本地的监控与管理,你的临时文件夹目录必须是NTFS格式的,否则不能提供足够的访问控制)

2.运行jconsole

这是一个默认的JMX管理客户端实现,直接在命令行敲入jconsole即可。jconsole用作相关的调试很方便,但是不适合作为商用,因为这东西本身比较占资源

3.在jconsole里面就能看到刚刚运行的Notepad了,双击连接即可,连接后可以看到该程序运行的各项性能参数

Ok了,就这么多?非也,以上只是针对本地监视和管理的,也就是在一台机器上运行监控程序和被监控程序,如果是远程呢,jconsole不在本机呢?那就比较麻烦一些了

1.远程的话,首先在运行某个Java程序前,必须加上一些变量参数:com.sun.management.jmxremote.port=portNum

portNum指代RMI连接的端口号。同时,远程连接必须提供安全保证,所以默认使用基于SSL和TLS的密码认证

2.设置密码(单用户)

将JRE_HOME/lib/management目录的jmxremote.password.template文件改名为jmxremote.password,修改文件的访问权限,只有管理员才能读写。然后给不同角色设置密码,默认已经有两个角色 monitorRole 和controlRole

3.设置密码(多用户)

将JRE_HOME/lib/management目录的jmxremote.password.template文件拷贝到JRE根目录并改名为jmxremote.password;同样修改权限、设置密码;然后按以下参数启动JVM:com.sun.management.jmxremote.password.file=pwFilePath

其中,pwFilePath是密码文件的路径

4.用jconsole连接

如果不用SSL,那么直接输入:jconsole hostName:portNum

如果使用SSL,就要加上参数:% java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=password Server

这只是验证了服务器端而已,如果还要验证SSL客户端,也要设置类似的值,详细设置可以参考:http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CustomizingStores

我们继续深入讨论一下刚才说到的密码验证。JMX提供了两个文件进行密码和访问控制,一个是刚才提到的jmxremote.password文件,用于设置角色密码;另一个jmxremote.access 是访问控制文件,定义了每个角色的读写的权限

密码文件示例:

# The "monitorRole" role has password "QED".

# The "controlRole" role has password "R&D".

monitorRole QED

controlRole R&D

access文件示例:

# o The "monitorRole" role has readonly access.

# o The "controlRole" role has readwrite access.

monitorRole   readonly

controlRole   readwrite

监测和管理相关的系统属性

之前已经提到了一些属性和含义,但是我们是在命令行下设置它们的,为了不每次都这么做,JMX提供了一个属性文件,即JRE_HOME/lib/management/management.properties,文件里面以注释形式提供了所有属性的含义和用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值