jstatd是一个RMI(Remove Method Invocation)的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如VisualVM)可以远程连接到本机的jvms 。注意是jvms,就是说运行jstatd命令后可以用监控工具监控本用户(运行jstatd命令的用户)所有已经启动的java程序。

jstatd的安装、启动、连接

JDK中默认就带 jstatd,如下图,Mac 下 JDK 默认安装在 /Library/Java/JavaVirtualMachines/版本号 目录下。

启动方式如下:

1、在服务器上新建文件,命名为jstatd.all.policy内容为: grant codebase "file:${java.home}/../lib/tools.jar" {

permission java.security.AllPermission;

};

2、在远程主机上启动 jstatd 并且不要关闭。

在服务器上jstatd.all.policy所在目录下执行下面的命令

其中 /usr/local/java/bin/jstatd为jstatd所在路径,为${JAVA_HOME}/bin/jstatd /usr/local/java/bin/jstatd -J-Djava.security.policy=jstatd.all.policy

想指定端口可以用下面命令: jstatd -J-Djava.security.policy=jstatd.policy -p 1099

3、VisualVM 中连接

在客户端用visualvm连接部署jstatd的服务器ip,显示如下:

添加完主机后,我们还需要添加 JMX 连接 和 jstatd 连接。

jstatd 的安全问题

jstatd服务只能监视具有适当的本地访问权限的JVM,因此jstatd进程与被监控的JVM必须运行在相同的用户权限中。但是有一些特殊的用户权限,如基于UNIX(TM)为系统的root用户,它有权限访问系统中所有JVM的资源,如果jstatd进程运行在这种权限中,那么它可以监视系统中的所有JVM,但是这也带来了额外的安全问题。

jstatd服务不会对客户端进行任何的验证,因此运行了jstatd服务的JVMs,网络上的任何用户的都具有访问权限,这种暴露不是我们所希望的,因此在启动jstatd之前本地安全策略必须要加以考虑,特别是在生产环境中或者是在不安全的网络环境中。

如果没有其他安全管理器被安装,jstatd服务将会安装一个RMISecurityPolicy的实例,因此需要在一个安全策略文件中指定,该策略文件必须符合的默认策略实施的策略文件语法。

下面的这个示例策略将允许jstatd服务具有JVM全部的访问权限:

grant codebase "file:${java.home}/../lib/tools.jar" {

permission java.security.AllPermission;

};

注:此处策略中的java.home,和JAVA_HOME不是一个概念,不要搞错了,此处的java.home指的是JRE的路径,这个是Java的系统属性,不需要手工指定,通常是这个jdk下面的jre路径,即可以认为${java.home}和${JAVA_HOME}/jre是等价,如果想查看这个变量的值,可以任意找一个运行着的Java应用,找到它的PID,然后通过如下jinfo命令查看就可以查看到java.home的值:

jinfo ${PID}|grep java.home

参考:

JMX连接

jstatd的远程监控,CPU的监控我这里看不到,这时候就要用到 JMX的连接了。

JMX 配置

远程机器的程序需要加上JVM参数

-Dcom.sun.management.jmxremote=true

-Dcom.sun.management.jmxremote.port=9090

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

备注:另外需要检查 hostname –i,看解析出来是否为本地的IP,如是127.0.0.1或者IP为多个IP中之一,则其他的IP无效,会连接不上。

也可以使用如下的参数手动指定 hostname 或者 ip 地址

-Djava.rmi.server.hostname=192.168.0.1

然后就可以使用菜单中的 “Add JMX Connection”,连接远程地址。

以 tomcat 为例, 我们需要修改 catalina.sh 文件。

在下面这行上面添加文字。

# ----- Execute The Requested Command -----------------------------------------

需要添加的文字:

JAVA_OPTS="-Djava.rmi.server.hostname=10.12.49.64

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=8081

-Dcom.sun.management.jmxremote.ssl=false

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

export JAVA_OPTS

注:第一行的ip为tomcat所在服务器的ip;第三行的端口为jmx使用的端口,确保此端口是未被占用的;(不要少了第一行,我一开始配置的时候就是没有第一行,jmx一直连接不上)

启动tomcat,netstat -aux 看看8080,8081端口是否被监听,如果被监听,说明配置成功了,然后在visualvm的远程选择ip,右键,添加“jmx连接”,成功连接就成功了

参考:

mac java visualvm_VisualVM连接远程Java进程相关推荐

  1. java连接虚拟机hadoop_本地eclipse java api连接远程虚拟机HBase

    1.本地与远程连通 无论是域名或者ip都可以,另外需保证HBase在虚拟机集群上正常运行. 2.本地要有一个跟远程相同的hadoop环境 当然不相同,只要兼容也可以,现采用hadoop-2.5.0-c ...

  2. hbase java 端口_HBase远程Java客户端尝试通过随机端口进行身份验证

    我想将本地java/scala进程连接到远程HBase服务器(v 1.1.2)(在docker中).我有以下代码:HBase远程Java客户端尝试通过随机端口进行身份验证 val config = H ...

  3. java实现连接linux,JAVA实现远道SSH连接linux并执行命令

    JAVA实现远程SSH连接linux并执行命令 package com.codeconch.ssh; import java.io.BufferedReader; import java.io.IOE ...

  4. java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码

    下面的源代码分为4个文件: chessclient.java:客户端主程序. chessinterface.java:客户端的界面. chesspad.java:棋盘的绘制. chessserver. ...

  5. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  6. 【技术分享】Mac使用scp连接远程服务器

    文章目录 1.背景 2.解决方案 2.1.使用scp连接远程主机 2.2.将Mac的文件上传至远程服务器 2.3.将Mac的文件上传至远程服务器 2.4.从远程服务器上下载文件到Mac 2.5.从远程 ...

  7. java无法连接远程服务器数据库,jar远程连接数据库失败

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我把项目导出为jar后,在我的电脑上能正常运行并且能访问数据库,但是在别人电脑上就会报错,报错如下: com.mysql.cj.jdbc.exceptio ...

  8. MAC实用SSH连接远程服务器,并实现文件上传下载

    MAC作为程序员的神器,在编程上的使用远超window的电脑,而MAC本身提供了SSH功能,配合VIM编辑器对编程十分有帮助. 使用ssh连接远程主机 ssh username@192.168.100 ...

  9. java dbcp连接池,java – DBCP连接池connection.close()是否返回到池的连接

    如果我们执行getConnection(),则使用DBCP中的BasicDataSource,在finally块中我们关闭连接,它确实会返回到池的连接,或者是否关闭连接.我正在检查的代码片段就是这个 ...

最新文章

  1. leetcode二维查找
  2. 【直播回放】80分钟剖析GAN如何从各个方向提升图像的质量
  3. IO多路复用概念介绍
  4. java怎么缓存行填充_为什么java的Exchanger.Slot缓存行填充像这样?
  5. css less 不要作用到子对象_CSS-预处理语言Sass、Less简述
  6. ZDB5304烧写方法
  7. C语言二维数组 int arr[2][3]
  8. BlackBerry 应用程序开发者指南 第一卷:基础--第7章 使用数据报(Datagram)连接...
  9. 分享:一篇webpack配置基础绝好文章
  10. 网易云接口获取音乐(转载练习)
  11. 通向云帝国的铁王座:卖书的贝佐斯和卖软件的纳德拉
  12. 【Linux】输出当前工作路径
  13. 此时不应有 \Common
  14. opencv马赛克python实现
  15. 软件测试常见分辨率测试,兼容测试:常见的显示器分辨率
  16. python发送短信验证码登录_python发送短信验证码
  17. 一文搞懂大数据开发,大数据开发体系详解
  18. 升级主板和CPU后OpenGL初始化失败问题的解决
  19. 光电耦合器原理及应用介绍
  20. 如何邀请媒体记者报道公司新产品发布会的宣传

热门文章

  1. UML学习笔记——顺序图(时序图)
  2. 关于慕课第一讲的鸢尾花测试笔记——tensorflow2
  3. FTP主动被动介绍,相关协议整理
  4. 第三方检验检测机构实验室人员能力评价如何进行?
  5. 51单片机自动量程(3挡)0-30v直流电压表万用表CD4051 LCD1602显示 MCP3201
  6. mpvue - vant-weap小程序分包
  7. 软件工程专业学生需要考全国计算机二级考试吗?
  8. Facebook的故事——The Social Network《社交网络》
  9. P1248 加工生产调度
  10. java邮箱发送_java邮箱发送报错