大家好,这里是「聊聊系统优化 」,并在下列地址同步更新

在这里我会从基于J2EE系统及互联网架构方面,来谈谈系统优化的各个方面,干货满满,欢迎订阅及关注!

前言

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

VisualVM

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

Tomcat Jmx配置

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

  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的按钮

方便本地压测监控JVM情况

总结

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

系统优化怎么做-JVM优化之VisualVM的更多相关文章

  1. 系统优化怎么做-JVM优化之开篇

    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...

  2. 给hive的metastore做JVM优化

    最近在测试环境下,hive的metastore不稳定,于是做一次JVM优化 在hive-env.sh中 export HADOOP_HOME=/opt/cdh/hadoop-2.6.0-cdh5.14 ...

  3. 系统优化怎么做-Tomcat优化

    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...

  4. 系统优化怎么做-SQL优化

    大家好,这里是「聊聊系统优化 」,并在下列地址同步更新 博客园:http://www.cnblogs.com/changsong/ 知乎专栏:https://zhuanlan.zhihu.com/yo ...

  5. 性能优化系列三:JVM优化

    一.几个基本概念 GCRoots对象都有哪些 所有正在运行的线程的栈上的引用变量.所有的全局变量.所有ClassLoader... 1.System Class.2.JNI Local3.JNI Gl ...

  6. JVM 优化问题

    jvm 优化问题 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  7. java架构之路-(JVM优化与原理)JVM之G1回收器和常见参数配置

    过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器.还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置. G1回收器 G1 (Garbage-First)是一款面向服务器的垃 ...

  8. Java虚拟机内存基础、垃圾收集算法及JVM优化

    1 JVM 简单结构图   1.1 类加载子系统与方法区 类加载子系统负责从文件系统或者网络中加载 Class 信息,加载的类信息存放于一块称 为方法区的内存空间.除了类的信息外,方法区中可能还会存放 ...

  9. 【JVM】JVM优化过程全记录

    请大神移步:https://segmentfault.com/a/1190000010510968?utm_source=tuicool&utm_medium=referral 今天看JVM群 ...

随机推荐

  1. springMVC @Component-@Resource-@Repository-@Service-@Controller的区别和理解

    作用: @Component------------------------泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注.(Component-------成分; 组分; 零件) @R ...

  2. 1023 GPA计算

    1023 GPA计算  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题解  查看运行结果     题目描述 Description 小松终于步入了大学的殿 ...

  3. CSS3弹性盒布局

    使用自适应的窗口弹性盒布局 可以使div总宽度等于浏览器宽度,而且可以随着浏览器的改变而改变. <!DOCTYPE html> <html lang="zh-CN" ...

  4. vue-router 的使用

    vue-router 是 vue  的  一个特色. 下面介绍vue-router 的使用: 一.先将vue-router作为vue 的一个插件使用 import Vue from 'vue' imp ...

  5. Java 之初(1)

    省赛结束之后有相当长一段空闲时间,于是就想先提前自学一点Java语言的知识,在这里纪录一下学习过程,希望能给自学Java的同学提供一点小帮助!(当然,也能方便我以后的复习用^_^) 在学习过程中有什么 ...

  6. c++开发ocx入门实践三--基于opencv的简易视频播发器ocx

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51404649  利用opencv做了个简易的视频播放器的ocx,可以在c++/c#/web ...

  7. tableview setData 设置数据(结构体对象)

    定义设置的对象类型 Q_DECLARE_METATYPE(LISTITEMDATA *) 设置数据类型 LISTITEMDATA *ptask = &(const_cast<LISTIT ...

  8. Linux下分布式项目部署环境搭建与使用(druid-1.0.25.jar)数据库连接加密

    一.JDK安装 1.执行命令:cd Downloads/ 2.上 传:jdk-8u111-linux-x64.tar.gz 到Downloads 3.执行命令:tar -zxvf jdk-8u111- ...

  9. “云中论道”之——使用开源技术和Azure公有云服务快速搭建云端IoT解决方案(上)

    “云中论道”技术课堂第一课开讲啦!微软各路技术咖们齐聚一堂,为大家带来干货不断!作为“云中论道“课堂的开课之作,我们首先邀请到了微软Azure专家级的架构师:槐长清,他为我们带来了关于“使用开源技术和 ...

  10. SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)

      本文是参考官方文档的实现,官方wiki:https://wiki.svnkit.com/Committing_To_A_Repository 本文核心使用的是ISVNEditor这个接口直接对Re ...