本文主要转自:http://blog.iamzsx.me/show.html?id=394002

http://www.wl566.com/wz/64022.html

1. 通过JMX方式监控远程linux上运行java程序

远程服务器:

要求在执行java程序时,加入若干参数:

java -Dcom.sun.management.jmxremote.port=40124 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false     -Djava.rmi.server.hostname=10.2.3.4  MultiThreads

说明:

注意:这些命令需要在同一行!

-Dcom.sun.management.jmxremote.port=40124:// 选取未被占用的端口

-Dcom.sun.management.jmxremote.authenticate=false  //不使用密码验证

-Djava.rmi.server.hostname=10.2.3.4  // 填运行程序的主机的ip。可以通过hostname -i 查看本地IP。如果是127.0.0.1,则需要修改,否则远程连接时本地无法区分。

可以通过在/etc/hosts中添加(外网ip 计算机名)记录,我当时添加了(10.2.3.4 xzhangcentosxzhangcentos)这条记录,

否则会报“java.net.MalformedURLException:Local host name unknown: java.net.UnknownHostException: xzhangcentos:xzhangcentos: 未知的名称或服务”错误。

MultiThreads:class文件的文件名。也可以加-jar xxxx.jar。

例如:java -Dcom.sun.management.jmxremote.port=40124 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar foo.jar

      接下来我们打开jvisualvm,然后在Remote上点击右键,填上我们要监控的服务器host: 10.2.3.4,点击OK。
 
     
      接下来,我们在10.2.3.4上面右键选择Add JMX Connection,把Connection信息填成10.2.3.4:40124。这里端口号就是我们之前启动foo.jar时设置的端口号。
 
    

在这种方式下,java程序中断,监控连接随之中断。

jvisualvm无法直接把远程的Java程序的heap dump到本地的机器上。当我们点击jvisualvm的heap dump时,只能把heap dump到远程机器上的某台目录,

然后还需要我们自己去把heap dump文件拷贝到本地,再用jvisualvm执行“文件”-“装入”,打开来分析。

2. 通过JMX方式监控远程Tomcat

如果Tomcat是部署在Linux/Unix主机上:

首先在Tomcat/bin目录下执行./shutdown.sh,关闭Tomcat服务。然后在catalina.sh中设置JAVA_OPTS处加上(原来JAVA_OPTS设置可能是注释掉的,不用管它,直接在这行后加):

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9999  -Dcom.sun.management.jmxremote.authenticate=false    - Dcom.sun.management.jmxremote.ssl=false"

其中9999为设置的JMX端口号。

保存,关闭。再执行./startup.sh启动Tomcat服务。

然后,就可以通过上节中的方法添加对远程Tomcat的监控了。

需要注意的是,如果要再关闭Tomcat服务,需要将加入的这一行注释掉。否则关闭不成功。

3. 通过jstatd方式监控远程linux上运行的java程序

使用jstatd的时候我们需要先建一个文件jstatd.all.policy,内容如下:

 grant codebase "file:${java.home}/../lib/tools.jar" {
      permission java.security.AllPermission;
 };
 
  
接下里我们使用下面的命令来启动jstatd(注意,启动jstatd的用户要求跟启动Java程序的用户一致,不然jstatd就没有权限访问程序的信息了):
 
jstatd -p 40123 -J -Djava.security.policy=jstatd.all.policy
 
   这里的40123是jstatd监听的端口,也就是我们要连接时使用的端口,jstatd.all.policy就是我们刚才创建的文件所在的路径。
 
   启动之后,我们在10.2.3.4上右键,选择Add jstatd Connection,填上端口号40123,然后点击OK。
  
   接下来我们就可以看到这台机器上所有的Java程序了(仅限启动jstatd的用户有权限查看的程序)。
 
   当然jstatd有一定的局限性,它只能查看信息,不能执行诸如Thread Dump和Heap Dump等操作。但是jstatd对于我们分析Java内存的状态一般来说是足够了。
 
   如果可以的话,最好同时开启JMX和jstatd。这样可以看到更丰富的信息。比如,只有JMX是看不到Main Class和Arguments等信息的。
 

本文主要转自:http://blog.iamzsx.me/show.html?id=394002

http://www.wl566.com/wz/64022.html

JVisualVM远程监控的更多相关文章

  1. 使用jvisualvm远程监控tomcat(阿里云ECS)

    写在前面:  使用jvisualvm远程监控tomcat(阿里云ECS),连接是报错:service:jmx:rmi:////jndi/rmi:IP:端口//  连接到 IP:端口,网上找了很多资料, ...

  2. jvisualvm远程监控Tomcat

    网上已经有很多这方面的资料,但有些很杂乱,这里做了整理总结. 一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. ...

  3. 【jvisualvm远程监控配置】

    第一步:首先通过hostname -i  和ifconfig命令,查看一下IP地址是否一致 如果不一致,修改hosts的IP地址:vi /etc/hosts    把ip地址和ifconfig的地址修 ...

  4. 使用jvisualvm远程监控Java程序

    使用Java自带的jvisualvm调试Java程序,可以查看CPU.内存.线程等信息,还可以进行Dump,无疑是一个利器 由于客户端是Windows.服务端是Linux,并且是最小安装的Linux, ...

  5. jvisualvm远程监控 Visual GC plugin NOT supported for this JVM

    1. 找到jdk安装目录. 2. 进入jdk的 bin目录,新建文件jstatd.all.policy. 3.编辑jstatd.all.policy文件,内容如下: 4. 给jstatd.all.po ...

  6. Jconsole/jvisualvm远程监控weblogic中间件配置

    1.进入linu操作界面,进入到启动服务目录下 2.选择要监控的服务的启动项,进入到编辑状态(注意:要先将该文件进行备份),如下图所示 3.修改USER_AGRS域,添加如下内容,注意修改IP USE ...

  7. jvisualvm远程监控jvm设置

    有些时候,需要对特定环境中的Java应用进行实时性能分析,大部分非开发和测试环境,一般都是用jvisualvm进行基本检测以最小化对系统的影响(其开启后,负载影响大约20%-30%),jvisualv ...

  8. jvisualvm远程监控 visualgc插件 不受此jvm支持问题

    https://yq.aliyun.com/ziliao/478212 1.修改远程服务器上java设置 vi $JAVA_HOME/jre/lib/security/java.policy    在 ...

  9. Java jvisualvm 远程监控tomcatt

    第一步 在远程tomcat 的bin目录下的start.sh 文件中添加一些内容(添加在exec "$PRGDIR"/"$EXECUTABLE" start & ...

随机推荐

  1. Bitbucket - 用git 用法

    核心流程: 从远端中心repo那里Git clone 到本地,再在本地开发(add, commit), 通常会利用branch管理,如果觉得code 没问题了,就push到远端的中心repo上.这里中 ...

  2. vue--axios发送请求

    首先安装:axios $ npm install axios $ cnpm install axios //taobao源 $ bower install axios 或者使用cdn: <scr ...

  3. Scala学习笔记(2)-类型注意

    Scala类型注意事项: 1.Any是绝对的根,所有的其他可实例化类型均有AnyVal和AnyRef派生. 2.所有AnyVal的类型成为值类型(所有数值类型.char.Booble和Unit) 3. ...

  4. codeforces 355C - Vasya and Robot

    因为在允许的情况下,必然是左右手交替进行,这样不会增加多余的无谓的能量. 然后根据不同的分界点,肯定会产生左手或右手重复使用的情况,这是就要加上Qr/Ql * 次数. 一开始的想法,很直接,枚举每个分 ...

  5. 【紫书】【重要】Abbott's Revenge UVA - 816 bfs 复杂模拟 带方向参数的迷宫

    题意:一个迷宫,每个交叉路口有一路标,限制了你从某方向进入该路口所能进入的路口. 题解:1.对于方向的处理:将node多增加一维dir,通过一个const 字符数组 加 上dir_id函数 以及一个方 ...

  6. iOS + Node + MySQL

    最近有空,又温习了一下Node ,配合Express 4.x可以很快的搭建一个简单的后台. Node比较适合频繁I/O,大量异步.至于更加复杂的后台逻辑还是用Java,个中滋味自己体验. Expres ...

  7. python count()

    count() 描述 Python count() 方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. 语法 count()方法语法: str.count(sub, st ...

  8. MYSQL常见的可优化点

    MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...

  9. Vue 数据绑定语法

    数据绑定语法 Vue.js 的模板是基于 DOM 实现的.这意味着所有的 Vue.js 模板都是可解析的有效的 HTML,且通过一些特殊的特性做了增强.Vue 模板因而从根本上不同于基于字符串的模板, ...

  10. vertx连接mysql数据库

    1:创建一个verticle组件 package jdbcConnection; import io.vertx.core.AbstractVerticle; import io.vertx.core ...