内存分析之visualvm工具的使用

一,windows本地连接

通过命令行执行以下命令

jvisualvm

即可弹出visualvm窗口,可直接查看本地java服务的相关信息,包括CPU,内存,类与线程的数量等等。

二,远程连接

visualvm远程连接服务器查看服务的VM信息有两种途径:JMX和Jstatd。

2.1 JMX

JMX(Java Management Extensions)是一个为应用程序植入管理功能的标准化代理和服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等。JConsole以及JVisualVM 都是通过JMX来实现对JAVA应用程序的监控。

2.1.1 服务器配置

visualvm通过JMX方式进行远程连接,需要对服务器进行配置。

# 切换到服务器的jdk安装路径下
cd /Data/app/oracle/product/11.2.0/dbhome_1/jdk
# 切换到jmx配置的子目录下
cd jre/lib/management
# 将目录下的模板文件复制后,再进行修改
cp jmxremote.password.template jmxremote.password
vim jmxremote.password
# 去掉 [# monitorRole  QED]和[# controlRole  R&D]的注释符号
sed -i 's/# monitorRole/monitorRole/p' jmxremote.password
sed -i 's/# controlRole/controlRole/p' jmxremote.password

2.1.2 运行服务命令配置

运行服务时添加参数配置

java -server  \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9999   \
-Dcom.sun.management.jmxremote.ssl=false   \
-Dcom.sun.management.jmxremote.authenticate=false   \
-Djava.rmi.server.hostname=10.175.94.106  \
-Dcom.sun.management.jmxremote.rmi.port=9999  \
-jar xxx.jar

参数解释

com.sun.management.jmxremote: 是否支持远程JMX访问,默认为true
com.sun.management.jmxremote.port: JMX远程监控端口号,注意防火墙开放端口
com.sun.management.jmxremote.ssl: 表示是否对连接开启SSL加密,默认开启
com.sun.management.jmxremote.authenticate: 是否需要开启用户认证,默认开启
java.rmi.server.hostname: 远程服务器的主机名
sun.management.jmxremote.rmi.port: RMI端口号(JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口),可以指定和JMX端口号相同

2.1.3 配置visualvm

服务器配置结束后,在visualvm左边栏的【远程】菜单右键添加远程主机。

在添加成功后的主机右键添加JMX连接时,连接输入框写上

10.175.94.106:9999

就可以查看该服务的VM信息。

这种方式每次都需要应用程序指定端口,使用时多多少少有些不方便。

2.2 Jstatd

命令jstatd是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd服务器将本机的Java应用程序信息传递到远程计算机。

2.2.1 配置安全策略

# 同样进入到jdk目录
cd /Data/app/oracle/product/11.2.0/dbhome_1/jdk
# 切换到配置安全策略的子目录下
cd jre/lib/security
# 配置安全策略
vim java.policy
# 在文件中新增一行:permission java.security.AllPermission;
# 启动jstatd
/Data/app/oracle/product/11.2.0/dbhome_1/jdk/bin/jstatd -J-Djava.security.policy=all.policy &

2.2.2 visualvm查看

在服务器执行命令后,在visualvm就可以看到该服务器正在运行中的Java应用程序了。

2.3 连接docker服务

2.3.1 JMX

修改Dockerfile文件即可

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.port=9999", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.authenticate=false", "-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx", "-Dcom.sun.management.jmxremote.rmi.port=9999", "-jar","/app.jar"]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值