为了账号安全,请及时绑定邮箱和手机立即绑定

系统优化怎么做-JVM优化之VisualVM

标签:
Java 架构

前言

在上一期主要讲到JVM优化的概念及经验。这一节章节去讲述相关工具的基本使用。

VisualVM

JDK自带,VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。

Tomcat Jmx配置

/bin/catalina.sh

CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=jj.xx.yy.zz -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
  • 替换其中的IP jj.xx.yy.zz 地址

  • 配置{jdk_path}/jre/lib/management/jmxremote.password

直接复制jmxremote.password.template, 修改默认访问密码

  • 设置访问属性

chmod +w jmxremote.password  
chmod 0400 jmxremote.password

概述页面

https://img1.sycdn.imooc.com//5b89140f0001746819201054.jpg

主要信息

  • 主机及端口

  • jvm参数信息

监视界面

https://img1.sycdn.imooc.com//5b89144100016fd615080961.jpg

主要信息

  • cpu指标

如cpu是多核,如果是n核,这里显示的单核平均占用 在通过top命令,看到的是 乘上n的结果,VisualVM显示 10.2/4(核数) =2.5%

https://img1.sycdn.imooc.com//5b89148000016bd008940289.jpg

  • 类加载数量

  • 堆及PerGen的大小

  • 类加载数量

  • 线程数

操作

  • 执行垃圾回收

  • 堆Dump

线程界面

主要信息

  • 实时及守护线程数

  • 线程状态 运行,休眠, 等待, 驻留, 监视

抽样器界面

CPU监控

  • 哪些方法是热点方法

  • 各个方法占用CPU时间及其比例

内存监控

5b8913b90001f48006000322.jpg

每个线程分配内存

5b8913b90001fe9906000318.jpg

VisualVM常用插件

安装插件

工具->插件

5b8913ba0001bdb806000371.jpg

检查新版本

需要配置url,不然会报以下出错

5b8913ba0001167705080393.jpg

在插件->设置页面填入合适的

https://visualvm.github.io/pluginscenters.html  在这个网站选择合适的插件地址

5b8913ba000114d906000352.jpg

填入URL地址,确定

5b8913bd00015ae206000368.jpg

配置成功后,在可用插件列表

5b8913bd0001bd1f06000365.jpg

常用插件

  • Visual GC

  • Jstatd

  • Threads Inspector

  • Tracer-Jvmstate , Collection, Jvm Probes

重要插件

VIsual GC

查看服务GC状态,需要配置jstatd并启动

cd /usr/local/src/jdk1.8.0_131/bin/ 
vim jstatd.all.policy

加入以下代码

grant codebase "file:${java.home}/../lib/tools.jar" 
{ permission java.security.AllPermission; };

如果没有配置{java.home},填写jdk的绝对路径也可行

在jdk.home/bin下启动

./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=ip.xx.yy.zz -J-Djava.rmi.server.logCalls=true

更改以上Ip ip.xx.yy.zz地址 指定服务的端口号,使用默认端口1099。确认1099没有防火墙拦截

选择目标机器,右键 ,添加jstated连接

5b8913bd0001b6a904930380.jpg

VisualGC界面

5b8913be00016f2b06000301.jpg

注意点:

  • 内存大小分情况

  • 主要关注 GC Time长短及间隔

Tracer

可以查询Heap,PerGen,Classes, Threads的

5b8913be000155a906000346.jpg

如图

Tracer可以监控很多项目

  • Heap

  • PerGen

  • Cleass

  • Treads

  • 等等

5b8913be0001453a06000346.jpg

利用VisualVm检查full GC

  1. VisualGC查看是否old Gen,Eden是否存在持续上升

  2. Mbean查看

  3. 利用sampler的分析内存采集,确定问题代码

内存视图,查看当前哪些业务对象比较多,并存在一直递增的趋势

 线程视图,查看哪些线程分配的内存最多

IntelliJ Idea集成VisualVm

  1. File ->Setting->Plugins->Browsers Repositrories

  2. 搜索VisualVM Launcher

  3. 安装, 重启Idea

  4. 默认Run及Debug旁边,会出现Run With VisulaVm及DebugWith VisulaVm的按钮

5b8913be0001cda407200237.jpg

方便本地压测监控JVM情况

总结

本节主要讲解VisualVm的使用以及常用插件的使用,好的工具对于找到问题有事半功倍的效果。在实践中理解理论知识。



点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
4952
获赞与收藏
87

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消