Elcker-JAVA内存检测工具visualvm及其使用

1.简介

VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力。它囊括的命令行工具包括jstat, JConsole, jstack, jmap 和 jinfo,这些工具与JDK的标准版本是一致的。可以使用VisualVM生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,

JVM常用内存查看工具 Jconsole,jProfile,VisualVM
1.Jconsole : jdk自带,功能简单,但是仅可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。官方文档
2.JProfiler:商业软件,功能强大。官网地址
3.VisualVM:JDK1.8之前自带(jvisualvm),JDK1.8以后脱离,可能是由于graalvm,官网地址

2.下载及启动

下载地址:

下载页面

window启动:

1.需要jdk1.8及更高版本,可修改配置文件中解压文件下etc/visualvm.conf 中的visualvm_jdkhome指定jdk版本;
2.双击visualvm.exe启动即可

VisualVM 所在的分区如果是NTFS格式,那么第一个问题就出现了:sun对NTFS格式的硬盘支持有问题!但可通过参数可避免,并完成启动。步骤如下:

  1. 创建一个visualvm.exe的快捷方式
  2. 在“目标”中添加如下参数 -XX:+PerfBypassFileSystemCheck

linux下

方法同上,不建议

界面介绍

在这里插入图片描述
主界面
在这里插入图片描述
应用说明
在这里插入图片描述
CPU 内存 线程 堆空间大小分配(年轻代、年老代、持久代分配) 类等的概况
在这里插入图片描述
应用内部的线程情况

3.使用说明

3.1 监听本地程序

本地的程序会自动识别在local目录下,双击对应的应用便可查看;

3.2 监听远端程序

3.2.1 监听程序

支持jstatd和JMX两部分
1.建立远程服务
在这里插入图片描述
2.输入地址,如下:
在这里插入图片描述
3.远程主机上启动jstatd
在远程服务器jdk 的bin目录下创建 jstatd.all.policy 文件
文件内容如下:(没有tools.jar)
Jdk11以前:

grant codebase "file:/usr/lib/jvm/java-1.8.0-openjdk-amd64/lib/tools.jar" {  
        permission java.security.AllPermission;  
     };

JDK11以后

grant codebase "jrt:/jdk.jstatd" {    
   permission java.security.AllPermission;    
};
grant codebase "jrt:/jdk.internal.jvmstat" {    
   permission java.security.AllPermission;    
};

4.启动

./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=本地机器实际的IP地址 -p 端口 -J-Djava.rmi.server.logCalls=true &

5.查看是否启动
jps -l
6.Visualvm 配置
在这里插入图片描述
在这里插入图片描述

7.远程主机上启动jmx
JVM 参数中添加:

-Djava.rmi.server.hostname=192.168.1.105 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

说明:
-Dcom.sun.management.jmxremote :允许使用JMX远程管理
-Dcom.sun.management.jmxremote.port=9008:JMX远程连接端口
-Dcom.sun.management.jmxremote.authenticate=false:不进行身份认证,任何用户都可以连接
-Dcom.sun.management.jmxremote.ssl=false :不使用ssl

3.2.2 服务器的监听配置

服务器的配置考虑安全需要使用用户名和密码连接

Tomcat
打开Tomcat下的bin/catalina.sh,设置JAVA_OPTS  
JAVA_OPTS='-Xms128m -Xmx256m -XX:MaxPermSize=128m
        -Djava.rmi.server.hostname=10.10.10.105
        -Dcom.sun.management.jmxremote.port=9999
        -Dcom.sun.management.jmxremote.ssl=false
        -Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/usr/java/default/jre/lib/management/jmxremote.password
        -Dcom.sun.management.jmxremote.access.file=/usr/java/default/jre/lib/management/jmxremote.access'

/usr/java/default/jre/lib/management/jmxremote.password和/usr/java/default/jre/lib/management/jmxremote.access是两个文件(在JAVA_HOME\jre\lib\management下有模板),以下分别编辑两个文件
# /usr/java/default/jre/lib/management/jmxremote.password
#(123456123456789为密码)
monitorRole 123456 
controlRole 123456789
# /usr/java/default/jre/lib/management/jmxremote.access
monitorRole   readonly
controlRole   readwrite
新建完成这两个文件要修改jmxremote.password的权限
chmod 600 jmxremote.password
WEBLOGIC

1.找到/bin/ setDomainEnv.sh
2.在java_options 中添加

-Djava.rmi.server.hostname=10.10.122.236
-Dcom.sun.management.jmxremote.port=6001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
或者上述tomcat 中的密码模式的配置参数;

visualvm配置

在这里插入图片描述

注意:
JMX实际是开了三个端口,分别是:
一个是JMX端口(需要指定),JMX远程连接端口。
一个是RMI端口(默认随机),实际通信用的端口。
一个是本地服务端口(随机),用于本地jstat、jconsole连接用,本地使用,我们不用理会。
程序连接,是先连上JMX端口,获取RMI端口,再连接RMI端口,问题就出在RMI端口上,一般没有配置指定端口号,程序默认会随机分配一个端口,容易让人忽略,在配置防火墙时只配了JMX端口,导致JMX连接不上。而且RMI端口是随机的,也不好配防火墙。
其实这个RMI端口是可以指定的,而且可以指定与JMX一致的端口,这样在配置防火墙时就方便多了,只需开放一个端口。 具体的配置是启动参数增加
-Dcom.sun.management.jmxremote.rmi.port=xxxx,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elcker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值