JVM 调优的概念

调优的前提是发现问题,然后通过工具定位问题并实地分析问题,最后根据问题现象选用最合适的策略优化 / 解决 问题;JVM调优的工具很多,有jdk自带的工具,例如:jvisualvm、jconsole;也有第三方的:eclipse附带的内存分析工具MAT、专业分析gc日志的工具——GChisto等。本文主要针对如下jdk自动工具进行介绍。

jps

jps 的作用是列出系统中正在运行的虚拟机线程

命令格式:

jps  [ options ]  [ hostid ]

1.options 功能选项

可单个,也可多个:

  • jps -l : 输出主类全名或jar路径



    一般情况下用到最多的是 jps -l 查看应用的pid

  • jps -q : 只输出LVMID

  • jps -m : 输出JVM启动时传递给main()的参数

  • jps -v : 输出JVM启动时显示指定的JVM参数

  • jps -l -m

2.hostid

hostid 是RMI注册表中,注册的主机名(很少用到略过)。

jstat

虚拟机统计信息监视工具

jstat 命令格式

	jstat  [ [ option ]  vmid  [ interval [s | ms] ] [ count ] ]

参数说明:

1.vmid格式

如果是本地虚拟机进程,那么它与lvmid一致,如果是远程虚拟机线程格式如下:

	[protocol:][//]lvmid[@hostname[:port]/servername]

2.interval 和 count

interval 和 count 代表查询间隔时间和查询次数,如果不进行指定则默认查询一次,如下指令查询虚拟机进程15196,每隔 500毫秒打印一次共计5次;

3.option

option 是监视选项

  • -class class loader的行为统计



    共计装载7478个类,总空间13498.5 Byte ; 卸载1个类,总空间... ;Time代表耗时

  • -compiler 输出编译器编译过的方法、耗时....

  • -gc 垃圾回收堆的行为统计



    C--总容量,U--已使用的容量

      	S0C : survivor0区的总容量
    S1C : survivor1区的总容量
    S0U : survivor0区已使用的容量
    S1C : survivor1区已使用的容量
    EC : Eden区的总容量
    EU : Eden区已使用的容量
    OC : Old区的总容量
    OU : Old区已使用的容量
    MC : Metaspace 容量
    MC : Metaspace 已用
    YGC : 新生代垃圾回收次数
    YGCT : 新生代垃圾回收时间
    FGC : 老年代垃圾回收次数
    FGCT : 老年代垃圾回收时间
    GCT : 垃圾回收总消耗时间
  • -gccapacity 输出各个堆区域使用到的最大、最小空间

      NGCMN :   新生代占用的最小空间
    NGCMX : 新生代占用的最大空间
    OGCMN : 老年代占用的最小空间
    OGCMX : 老年代占用的最大空间
    OGC: 当前年老代的容量 (KB)
    OC: 当前年老代的空间 (KB)
  • -gcutil 输出内容类似jstat -gc , -gcutil 是按照百分比输出的



    S0、S1 占用为空,Eden 占用 52.18%,old--8%,Metaspace 95.25%......;young gc 5次共耗时0.027,Full GC 2次 共耗时 0.067。

  • -gccause 同-gcutil,还会输出最近两次垃圾回收事件的原因

  • -gcnew 新生代行为统计

      TT:Tenuring threshold(提升阈值)
    MTT:最大的tenuring threshold
    DSS:survivor区域大小 (KB)
  • -gcnewcapacity 同 -gcnew 但是它关注的是新生代各区域的边界

  • -gcold 年老代和永生代行为统计

  • -gcoldcapacity 同 -gcold 它关注的是边界

jinfo

jinfo可以实时查看和调整虚拟机参数,指令格式如下:

	jinfo  [ option ] pid 

		-flag : 输出指定args参数的值
-flags : 不需要args参数,输出所有JVM参数的值
-sysprops : 输出系统属性,等同于System.getProperties()

例如,查看进程 15196 的所有参数:

jinfo -flags 15196

jmap

jmap 是内存映射工具,用于生成堆转储快照,命令格式如下:

jmap [ option ] vmid
  • dump : 生成堆转储快照

      jmap -dump:live,format=b,file=D:\\DUMP_FILES\\dump.hprof 15196

  • finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象

  • heap : 显示Java堆详细信息

  • histo : 显示堆中对象的统计信息

  • permstat : to print permanent generation statistics

  • F : 当-dump没有响应时,强制生成dump快照

jhat

jhat配合jmap使用,它可以分析jmap生成的dump快照

	jhat -J-Xmx512m D:\\DUMP_FILES\\dump.hprof



jstack

生成堆线程快照

-F : 当正常输出请求不被响应时,强制输出线程堆栈
-l : 除堆栈外,显示关于锁的附加信息
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈



jvisualvm

jvisualvm是图形化工具



《深入理解Java虚拟机》(四) 调优工具、指令的更多相关文章

  1. 《深入理解Java虚拟机》调优案例分析与实战

    上节学习回顾 在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事. 本节学习重点 在书本上本 ...

  2. Java虚拟机性能调优相关

    一.JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动 ...

  3. Java虚拟机性能调优(一)

    Java虚拟机监控与调优,借助Java自带分析工具. jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat:JVM Statistics M ...

  4. 深入理解Java虚拟机(四)——HotSpot垃圾收集器详解

    垃圾收集器 新生代收集器 1.Serial收集器 特点: 单线程工作,收集的时候就会停止其他所有工作线程,用户不可知不可控,会使得用户界面出现停顿. 简单高效,是所有收集器中额外内存消耗最少的. 没有 ...

  5. 深入理解Java虚拟机(五)——JDK故障处理工具

    进程状况工具:jps jps(JVM Process Status Tool) 作用 用于虚拟机中正在运行的所有进程. 显示虚拟机执行的主类名称以及这些进程的本地虚拟机唯一ID. 可以通过RMI协议查 ...

  6. 【Java/Android性能优2】Android性能调优工具TraceView介绍

    本文参考:http://www.trinea.cn/android/android-traceview/ Android自带的TraceView堪比java的性能调优工具visualvm线程视图,可以 ...

  7. 《深入理解Java虚拟机》(五)JVM调优 - 工具

    JVM调优 - 工具 JConsole:Java监视与管理控制台 JConsole是一个机遇JMX(Java Management Extensions,即Java管理扩展)的JVM监控与管理工具,监 ...

  8. 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

    虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...

  9. JVM | 第1部分:自动内存管理与性能调优《深入理解 Java 虚拟机》

    目录 前言 1. 自动内存管理 1.1 JVM运行时数据区 1.2 Java 内存结构 1.3 HotSpot 虚拟机创建对象 1.4 HotSpot 虚拟机的对象内存布局 1.5 访问对象 2. 垃 ...

  10. Java虚拟机(六):JVM调优工具

    工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相关问题 ...

随机推荐

  1. [转帖]signal 11 (SIGSEGV)错误排查

    https://www.jianshu.com/p/a4250c72d391 jni调试最蛋疼的就是signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault a ...

  2. [转帖]Shell三剑客之sed

    目录 Shell三剑客 sed工具 sed 流编辑器的工作过程 sed命令格式与选项操作符 sed命令的常用选项 sed命令的打印功能 默认打印方式 sed命令的寻址打印 文本模式过滤行内容 sed的 ...

  3. [转帖]Jmeter学习笔记(八)——监听器元件之聚合报告

    https://www.cnblogs.com/pachongshangdexuebi/p/11507298.html 1.聚合报告添加 聚合报告是常用的监听器之一,添加路径: 点击线程组->添 ...

  4. 【转帖】《MySQL高级篇》四、索引的存储结构

    1. 为什么使用索引 假如给数据使用 二叉树 这样的数据结构进行存储,如下图所示 2.索引及其优缺点 2.1 索引概述 2.2 优点 类似大学图书馆建书目索引,提高数据检索的效率,降低 数据库的 IO ...

  5. [转帖]Linux命令拾遗-动态追踪工具

      原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 这是Linux命令拾遗系列的第六篇,本篇主要介绍工作中常用的动态追踪工具strace.arthas.bpft ...

  6. mysql8 CentOS7 简要安装说明

    1. 卸载mariadb rpm -qa |grep mariadb |xargs yum remove -y比较简单的卸载办法. 2. 安装所有的rpm包. yum localinstall *.r ...

  7. mysql8 initialize 命令 初学版 lower_case_table_names

    1. 今天开发找我跟我说 我安装的mysql 不对. 比较蛋疼.  需要修改一个参数 但是数据库已经初始进去了  重装起来比较麻烦. 硬着头皮搞. 2. 参数的名字为: lower_case_tabl ...

  8. 【0基础学爬虫】爬虫基础之自动化工具 Selenium 的使用

    大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶.逆向相关文章,为实现从易到难全方位覆盖,特设[0基础学爬 ...

  9. 开源项目03---YiShaAdmin

    项目名称:YiShaAdmin 项目所用技术栈: web mvc bootstrap3 jquery aspnetcore等 项目简介: YiShaAdmin 基于.NET Core Web开发,借鉴 ...

  10. Gin 框架介绍与快速入门

    Gin 框架介绍与快速入门 目录 Gin 框架介绍与快速入门 一.Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二.基本使用 1.安 ...