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. linux下如何查询jdk的安装路径
  2. jdbc就是这么简单
  3. 若依前后端分离版(vue)中配置页面跳转的路由
  4. LIBSVM的使用方法以及参数注释总结
  5. IBatis.Net学习笔记十三:在IBatis.Net中调用存储过程
  6. RabbitMQ默认端口记录(亲测)
  7. 历时7周,当然了真正的安装时间没这么多,终于把集群安装好了
  8. [vue] 说下你对指令的理解?
  9. php 对象赋值后改变成员变量影响赋值对象
  10. 小米8劲敌来了!同是骁龙845,它降价幅度更大
  11. MyEclipse教程:Web开发——调试JSP
  12. 040_Auto.js
  13. 开源框架 Drupal 修复多个访问绕过和 CSRF 漏洞
  14. vue2.0 实现导航守卫(路由守卫)
  15. 夺标查询和联合查询有什么区别么
  16. QT分析之网络编程(七)
  17. Nginx在Linux下的安装部署
  18. linux编译安装openssl-3.0.2
  19. Nature子刊:大脑在局部区域的结构-功能耦合的遗传度与个体差异
  20. CRM上线之路 走上了CRM实施顾问-第101天上班 -第21周

热门文章

  1. 软件测试信息采集系统案例实践,软件测试课件.ppt
  2. 多元函数求极值,万能函数——fmincon讲解
  3. 苹果为何不给“人民”面子
  4. 还有34天18年就过完了, 收好这份2019区块链行业指南
  5. 橙仕X2厢式货车开始上市
  6. 【转】计算机类学术论文 28个常见出版社一般写法(参考文献用)
  7. GPT-4不披露技术细节,马斯克批判其背离初心,OpenAI不“open“了
  8. 如何在前端调试模式下禁用JavaScript
  9. 公众号自动回复小程序 html代码,图文和公众号自动回复跳转小程序
  10. 小程序视频列表类似抖音滑动效果