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. Nginx IP地址较少时如何合理分配后端服务资源

    Nginx IP地址较少时如何合理分配后端服务资源 背景 客户系统很多时候会通过网闸或者是VPN登录到产品内 此时的IP地址一般是相同的. 这种情况下较难实现根据ip地址使用ip_hash的方式将压力 ...

  2. [转帖]UNIX SOCKET简介

    UNIX Domain SOCKET 是在Socket架构上发展起来的用于同一台主机的进程间通讯(IPC).它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序列号应答等.只是将应用层数据从一个 ...

  3. [转帖]linux下/proc/sysrq-trigger详解

    /proc/sysrq-trigger详解 这是一组"魔术组合键",只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键能即时打印出内核的信息. 使用SysRq组合键是了解 ...

  4. OpenOffice的简单安装

    1. OpenOffice的下载 http://www.openoffice.org/download/ 没有找到arm和龙芯版本的 可能需要二进制编译方式安装, 暂时还没学习处理. 2. 将下载好的 ...

  5. 使用influxdb以及Grafana监控vCenter的操作步骤

    1. 下载安装介质 计划telegraf和influxdb 使用rpm包进行安装.Grafana使用docker容器方式安装 下载路径为: https://repos.influxdata.com/r ...

  6. bean的一生

    你曾读spring源码 "不知所云"."绞尽脑汁"."不知所措"嘛 那这篇文章可能会对你有所帮助,小编尝试用简单.易懂的例子来模拟sprin ...

  7. css水平居中的5种几种方式

    元素水平居中的第一种方式 子元素不需要宽度也可以 <div class="box"> <div class="son"> 我是内容 &l ...

  8. 基于go-restful实现的PoW算力池模型

    最开始知道区块链是在17年初,当时因为项目压力不大,开始研究比特币源码.对于比特币中提到的Proof of Work,当时只是一眼带过,并没有详细查看过相关的代码.在最近的项目中,考虑到性能的要求,需 ...

  9. 紧跟潮流,抓住趋势,跟上全民AI的节奏,开源IM项目OpenIM产品介绍,为AIGC贡献力量

    开源价值 高度自主.安全可控.开放自由,私有化部署,一切皆可控 透明度和可信度:开源软件的源代码是公开的,任何人都可以查看和检查代码,从而增强了软件的透明度和可信度.用户可以了解软件的内部结构和运作方 ...

  10. 基于.Net Core3.1 MVC + EF Core的项目(一)框架的初步搭建

    项目暂时分为六大块,结构如图所示 代码地址是  https://github.com/hudean/VacantCloud-   里面有许多没有完成,不过一些大致的内容都写的差不多了,权限认证依赖注入 ...