系统优化怎么做-JVM优化之VisualVM
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新
- 博客园:http://www.cnblogs.com/changsong/
- 知乎专栏:https://zhuanlan.zhihu.com/youhua
- 思否专栏:https://segmentfault.com/blog/youhua
- 全网私活,免费订阅: http://www.zsihuo.com
在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化的各个方面,干货满满,欢迎订阅及关注!
前言
在上一期主要讲到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 jmxremote.password
概述页面
主要信息
- 主机及端口
- jvm参数信息
监视界面
主要信息
- cpu指标
如cpu是多核,如果是n核,这里显示的单核平均占用
在通过top命令,看到的是 乘上n的结果,VisualVM显示 10.2/4(核数) =2.5%
- 类加载数量
- 堆及PerGen的大小
- 类加载数量
- 线程数
操作
- 执行垃圾回收
- 堆Dump
线程界面
主要信息
- 实时及守护线程数
- 线程状态 运行,休眠, 等待, 驻留, 监视
抽样器界面
CPU监控
- 哪些方法是热点方法
- 各个方法占用CPU时间及其比例
内存监控
每个线程分配内存
VisualVM常用插件
安装插件
工具->插件
检查新版本
需要配置url,不然会报以下出错
在插件->设置页面填入合适的
https://visualvm.github.io/pluginscenters.html 在这个网站选择合适的插件地址
填入URL地址,确定
配置成功后,在可用插件列表
常用插件
- 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连接
VisualGC界面
注意点:
- 内存大小分情况
- 主要关注 GC Time长短及间隔
Tracer
可以查询Heap,PerGen,Classes, Threads的
如图
Tracer可以监控很多项目
- Heap
- PerGen
- Cleass
- Treads
- 等等
利用VisualVm检查full GC
- VisualGC查看是否old Gen,Eden是否存在持续上升
- Mbean查看
- 利用sampler的分析内存采集,确定问题代码
内存视图,查看当前哪些业务对象比较多,并存在一直递增的趋势
线程视图,查看哪些线程分配的内存最多
IntelliJ Idea集成VisualVm
- File ->Setting->Plugins->Browsers Repositrories
- 搜索VisualVM Launcher
- 安装, 重启Idea
- 默认Run及Debug旁边,会出现Run With VisulaVm及DebugWith VisulaVm的按钮
方便本地压测监控JVM情况
总结
本节主要讲解VisualVm的使用以及常用插件的使用,好的工具对于找到问题有事半功倍的效果。在实践中理解理论知识。
系统优化怎么做-JVM优化之VisualVM的更多相关文章
- 系统优化怎么做-JVM优化之开篇
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...
- 给hive的metastore做JVM优化
最近在测试环境下,hive的metastore不稳定,于是做一次JVM优化 在hive-env.sh中 export HADOOP_HOME=/opt/cdh/hadoop-2.6.0-cdh5.14 ...
- 系统优化怎么做-Tomcat优化
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...
- 系统优化怎么做-SQL优化
大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...
- 性能优化系列三:JVM优化
一.几个基本概念 GCRoots对象都有哪些 所有正在运行的线程的栈上的引用变量.所有的全局变量.所有ClassLoader... 1.System Class.2.JNI Local3.JNI Gl ...
- JVM 优化问题
jvm 优化问题 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...
- java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置
过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器.还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置. G1回收器 G1 (Garbage-First)是一款面向服务器的垃 ...
- Java虚拟机内存基础、垃圾收集算法及JVM优化
1 JVM 简单结构图 1.1 类加载子系统与方法区 类加载子系统负责从文件系统或者网络中加载 Class 信息,加载的类信息存放于一块称 为方法区的内存空间.除了类的信息外,方法区中可能还会存放 ...
- 【JVM】JVM优化过程全记录
请大神移步:https://segmentfault.com/a/1190000010510968?utm_source=tuicool&utm_medium=referral 今天看JVM群 ...
随机推荐
- Hibernate 一对多,多对多,多对一检索策略
一.概述 我们先来谈谈检索数据时的两个问题: 1.不浪费内存 2.更好的检索效率 以上说的问题都是我们想要避免的,接下来就引出了我们要讨论的话题---------------hibernate检索 ...
- Django Cookie于Session
一.Cookie与Session由来 因为Http协议的特性,每一次来自用户浏览器的请求都是无状态且独立的,通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用 ...
- HTML5学习笔记之canvas
标签 canvas标签有一个默认宽高:300*150: canvas的宽高一般写到行间样式中,写在style会有问题详细请看这里: 绘制环境 要绘图先要获取到绘制环境: var oC = docume ...
- HADOOP背景介绍
1. HADOOP背景介绍 1.1 什么是HADOOP 1. HADOOP是apache旗下的一套开源软件平台 2. HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分 ...
- python基础(二)--多值参数以及类
1.多值参数函数 def 函数名(*args , **kwargs): ....... 多值参数函数顾名思义能够传入多个参数,args表示传入的元组,kwargs表示传入的字典 def functio ...
- 缓存服务Ehcache方案
1 Ehcache简介 在Java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java 开发).被认证 ...
- LeetCode--Combination Sum --ZZ
http://blog.csdn.net/linhuanmars/article/details/20828631 这个题是一个NP问题,方法仍然是N-Queens中介绍的套路.基本思路是先排好序,然 ...
- docker中自定ingress网络
在某些时候,docker自动生成的ingress网络会与服务器上已经存在的网络产生冲突,这个时候,你需要自定义ingress. 在自定义前,你需要删除所有有端口发布的服务. 使用命令docker ne ...
- Entity Framework: 主从表的增删改
1.根据主表添加从表数据 var dest = (from d in context.Destinations where d.Name == "Bali" select d).S ...
- Ubuntu下Apache配置网站根路径
安装之后apache默认的跟路径是/var/www/ 如何修改这个默认路径呢? 直接编辑/etc/apache2/sites-available/default-ssl.conf,将Docum ...