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. 达梦数据库varchar和nvarchar的验证

    达梦数据库varchar和nvarchar的验证 测试SQL create tablespace zhaobsh datafile '/opt/dmdbms/data/DAMENG/zhaobsh.d ...

  2. [转帖]Linux cache参数调优

    https://zhuanlan.zhihu.com/p/136237953 缓存机制(cache)是保证Linux环境下对硬盘/flash操作效率的有效方式.cache建立在内存中,它缓存了硬盘/f ...

  3. [转帖]新版 Elasticsearch 中的强悍插件 X-pack

    https://zhuanlan.zhihu.com/p/36337697   3 人赞同了该文章 作者:Alan 岂安科技运维工程师努力踏上一条为后人留坑的运维之路.(逃 1 前言 Elk 日志可视 ...

  4. [转帖]腾讯北极星 Polaris 试用

    https://www.cnblogs.com/QIAOXINGXING001/p/15482012.html 了解.试用 昨天稀土开发者大会2021提到了腾讯开源的北极星, 试用一下; 官网: 北极 ...

  5. Springboot 内嵌Tomcat 的http连接池与thread的关系

    前言 最近看了很多tcp/ip 连接以及 IO相关的文章,但是依旧对数据库连接池等的部分不是很清楚, 所以这里仅是简单描述一下tomcat对应的http连接池数量的情况,不考虑与数据库的连接池的情况. ...

  6. Windows10磁盘占用100%和内存占用高

    前言 公司配备了两台电脑,两台电脑都是安装的win10系统,一台是磁盘占用高,另一台是内存可用低. 具体情况如下: 一台外网机 8g内存,安装win10 专业版,开机一天后经常出现内存不够用,但其实都 ...

  7. gRPC学习小札

    gRPC 前言 为什么使用gRPC 传输协议 传输效率 性能消耗 gRPC入门 gRPC流 证书认证 使用根证书 gRPC实现token认证 和Web服务共存 验证器 REST接口 grpcurl工具 ...

  8. 编译Apache服务部署静态网站

    Apache是世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.它快速.可靠并且可通过简单的API扩充, ...

  9. LyScript 验证PE程序开启的保护

    有些漏洞利用代码需要在某个保护模式被关闭的情况下才可以利用成功,在此之前需要得到程序开启了何种保护方式.验证其实有很多方法,其原理是读入PE文件头部结构,找到OPTIONAL_HEADER.DllCh ...

  10. 【链表】单链表的介绍和基本操作(C语言实现)【保姆级别详细教学】

    单链表 文章目录 前言 单链表基本介绍 基本结构 与顺序表的区别以及学习单链表的必要性 单链表的实现 结点的定义以及头指针的创建 单链表的遍历(打印接口的实现)[重点] 开辟结点接口 尾插接口 尾删接 ...