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. [转帖]prometheus的TCP alloc取值

    prometheus的TCP alloc取值 sockets: used:已使用的所有协议套接字总量 TCP: orphan:无主(不属于任何进程)的TCP连接数(无用.待销毁的TCP socket数 ...

  2. 华城金锐申威SW64服务器重装过程

    华城金锐申威SW64服务器重装过程 背景 这边为了进行兼容性验证新进了两套申威的服务器. 一台机器带着安装好的操作系统了. 但是另外一套没有对应的系统. 端午期间想着趁着上班的人少, 加吧给处理一下. ...

  3. [转帖]Kafka关键参数设置

    https://www.cnblogs.com/wwcom123/p/11181680.html 生产环境中使用Kafka,参数调优非常重要,而Kafka参数众多,我们的java的Configurat ...

  4. 【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

    一.网络流量上不去二.中断绑定2.1 关闭中断平衡守护进程2.2 脱离中断平衡守护进程2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上 ...

  5. [转帖]Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能

    文件缓存是一项重要的性能改进,在大多数情况下,读缓存在绝大多数情况下是有益无害的(程序可以直接从RAM中读取数据).写缓存比较复杂,Linux内核将磁盘写入缓存,过段时间再异步将它们刷新到磁盘.这对加 ...

  6. [转帖]Cgroups资源限制

    https://cloud.tencent.com/developer/article/2108816?areaSource=105001.13&traceId=QzVtWN5jGl8zeYZ ...

  7. [转帖] Linux命令拾遗-网络抓包工具

    https://www.cnblogs.com/codelogs/p/16060684.html 简介# Linux中有很多抓包工具,如ngrep.tcpdump与tshark等,它们有很多用法与使用 ...

  8. CentOS8 设置开机自动登录账户的方法

    CentOS8 设置开机自动登录账户的方法 修改/etc/gdm/custom.conf文件, 并且添加内容即可. vim /etc/gdm/custom.conf # 在配置节下添加如下内容. [d ...

  9. sed 删除部分行以及删除包含某些行的命令

    sed的简单学习 前言: 最近进行mysql数据库的备份恢复操作,发现source 命令执行时数据库表的速度非常缓慢, 本来想通过这种方式处理一下,能够减少数据备份的处理. 删除包含内容的信息 sed ...

  10. CS231N Assigenment1 two_layer_net笔记

    two_layer_net.ipynb 之前对 x.reshape(x.shape[0], -1)语句的输出结果理解一直有误: 1 x = [[1,4,7,2],[2,5,7,4]] 2 x = np ...