zoukankan      html  css  js  c++  java
  • 使用jvisualVm监控本地和远程的jvm

    jvisualVm是jdk自带的可视化监控工具,功能很强大,可安装各种扩展插件。能够在windows环境监控本地和远端(一般是无界面的linux系统)的java进程。

    1、在远程机器上添加权限策略文件

         在服务器{JAVA_HOME}/bin目录建立文件:jstatd.all.policy(名字随便,符合*.policy即可), 文件内容为:

    1 grant codebase "file:${java.home}/../lib/tools.jar" {    
    2     permission java.security.AllPermission;    
    3 };  

    2、修改服务器 hosts 文件中的 IP 地址

       要使Java VisualVM 成功连接到远程服务器上,服务器端应该在 /etc/hosts 文件中把本机地址设为本机的 IP 地址。使用 hostname -i 命令查看,如果显示的是 127.0.0.1 或者与本机实际 IP 不一致的话,需要把 /etc/hosts 文件中相应的地址改为本机实际 IP 。

    3、运行 jstatd 守护程序

    在jstatd.all.policy 当前目录运行

    nohup $JAVA_HOME/bin/jstatd -J-Djava.security.policy=jstatd.all.policy &

    如果需要RMI 日志功能的话,还可以在启动参数中加入 -J-Djava.rmi.server.logCalls=true 。

    nohup $JAVA_HOME/bin/jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.logCalls=true &

    可以自己制定jstatd的端口,加-p <port> 参数,默认端口为1099.

    如果出现如下错误:

     Could not bind /JStatRemoteHost to RMI Registry
        java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
            java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
            java.lang.ClassNotFoundException: sun.jvmstat.monitor.remote.RemoteHost (no security manager: RMI class loader disabled)
            at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)
            at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
            at sun.rmi.transport.Transport$1.run(Transport.java:177)
            at sun.rmi.transport.Transport$1.run(Transport.java:174)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
            at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
            at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            at java.lang.Thread.run(Thread.java:722)
            at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
            at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
            at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
            at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
            at java.rmi.Naming.rebind(Naming.java:177)
            at sun.tools.jstatd.Jstatd.bind(Jstatd.java:57)
            at sun.tools.jstatd.Jstatd.main(Jstatd.java:143)

    这种错误是你的端口被占用了,jstatd默认启动1099端口,使用netstat -anp | grep 1099 看看端口是不是被占用了!如果被占用换一个端口。

    jstatd -J-Djava.security.policy=jstatd.all.policy -p 2099

    4、使用本地jvisualVm连接远程主机

    进过1、2、3步骤,最后我们使用window本地的jvisualVm连接配置好的远程主机,这个很简单,不介绍。

    但是问题来了,第3部的时候连接配置却怎么也没有看到远程机器的java进程,排查这个问题,请确定你的一下步骤是否成功

    (1)服务端机器jstatd服务是否开启:使用jps查看是否有jstatd进程。

    (2)确定本地机器是否连接上远程服务器,使用netstat -anp | grep jstatd进程ID查看网络连接,是否有你本地机器IP

    配置并启动jvisualvm

    直接命令行启动jvisualvm或{JAVA_HOME}/bin目录,找到jvisualvm.exe程序,双击打开。

    如果重新指定了jstatd端口,选择高级设置修改端口,如下图: 

    通过以上方式连接服务器发现一个问题,不能监控CPU 。提示我们建立 JMX ,建立 JMX 提示要求端口号。(JMX: Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。 JMX可以跨越一系列异构操作系统平台、系统体系结构和 网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。而 Visual VM是通过 JMX 来和远程 Java 应用联系的 )。

    5、jvm进程启动项配置

    以tomcat为例:

    服务器的 tomcat 配置 jvm 启动参数。 在 tomcat 的 catalina.sh 中添加如下参数:

    JAVA_OPTS="-Djava.rmi.server.hostname=192.168.0.216 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
    注:
    -Dcom.sun.management.jmxremote.port :1100 这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
    -Dcom.sun.management.jmxremote.ssl=false   指定了 JMX 是否启用 ssl
    -Dcom.sun.management.jmxremote.authenticate=false   指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
    前面是固定配置,是 JMX 的远程服务权限的
    -Djava.rmi.server.hostname :这个是配置 server 的 IP 的

    如果同时配置了JMX,可以在添加JMX连接如下图: 

    添加后如图所示: 
     

    本文转载自:http://ihuangweiwei.iteye.com/blog/1219302

  • 相关阅读:
    Blank page instead of the SharePoint Central Administration site
    BizTalk 2010 BAM Configure
    Use ODBA with Visio 2007
    Handling SOAP Exceptions in BizTalk Orchestrations
    BizTalk与WebMethods之间的EDI交换
    Append messages in BizTalk
    FTP protocol commands
    Using Dynamic Maps in BizTalk(From CodeProject)
    Synchronous To Asynchronous Flows Without An Orchestration的简单实现
    WSE3 and "Action for ultimate recipient is required but not present in the message."
  • 原文地址:https://www.cnblogs.com/URNOTBENBEN/p/14626860.html
Copyright © 2011-2022 走看看