《深入理解Java虚拟机》之虚拟机运行情况查看

  • jps:虚拟机进程状况工具
    • jps命令格式
    • options可选参数
    • 命令执行结果:
  • jstat:虚拟机统计信息监视工具
    • jstat命令格式
    • option选项参数
    • 执行-gcutil参数及其分析结果如下
  • jinfo:Java配置信息工具
    • jinfo命令格式
    • option可选参数说明
    • 输出当前 jvm 进程的全部参数和系统属性
    • 输出对应名称的参数
  • jmap:内存印象工具
    • jmap命令格式
    • option可选参数列表
    • 使用jmap -heap id查看堆信息
  • jstack:Java堆栈跟踪工具
    • jstack命令格式
    • option参数说明
    • 查看详细的堆栈信息

该博客是本人在学习Java虚拟机过程中的一些积累,便于日后查证,如有错误之处,欢迎各位看官指正。本人联系方式 jenson_97@163.com,期待与各路大神交流。

转载请注明出处https://blog.csdn.net/weixin_44684539/article/details/107481396.

jps:虚拟机进程状况工具

jps命令参考了UNIX系统的ps命令,在记忆时可以联想记忆。其功能也与ps命令类似:列举出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称,以及这些进程的本地虚拟机唯一ID(LVMID)。对于本地虚拟机来说,LVMID与操作系统的进程ID(PID)是一致的。

jps命令格式

// jps命令格式
[root@localhost ~]# jps [options] [hostid]

options可选参数

选项 作用
-q 只输出LVMID,省略主类名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类全名,如果进程执行的是jar包,输出jar路径
-v 输出虚拟机进程启动时JVM参数

jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,jps命令中的hostid即为RMI注册表中注册的主机名称。

命令执行结果:

jstat:虚拟机统计信息监视工具

jstat(JVM Statistics Monitoring Tool)命令用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,它将是运行期定位虚拟机性能问题的首选工具。

jstat命令格式

//jstat命令格式
[root@localhost ~]# jstat [option vmid[interval[s|ms]]]

对于LVMID与VMID的说明:如果是本地虚拟机进程,VMID与LVMID是一致的,如果是远程虚拟机进程,那么VMID的格式应该是:

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

其中参数interval和count代表查询间隔和次数,如果省略这两个参数,则表示只查询一次。假设需要每隔250ms查询一次进程1305的垃圾收集情况,且共执行10次,那么命令应该是:

option选项参数

option选项参数代表用户希望查询的虚拟机信息。主要分为三大类:类装载、垃圾收集、运行期编译状况。具体参数列表如下:

选项 作用
-class 监视类装载,卸载数量,总空间以及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区、两个servivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
-gccapacity 监视内容与GC基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil 监视内容与GC基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew 监视新生代GC状况
-gcnewcapacity 监视内容与-gcnew基本相同,输出主演关注使用到的最大、最小空间
-gcold 监视老年代GC状况
-gcoldcapacity 监视内容与-gcold基本相同,输出主演关注使用到的最大、最小空间
-gcpermcapacity 输出永久代使用到的最大、最小空间
-compiler 输出JIT编辑器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译的方法

执行-gcutil参数及其分析结果如下


结果表明:这台服务器的新生代Eden区(E,表示Eden)使用了50.25%的空间;两个servivor区(S0、S1,表示servivor0,servivor1)分别使用了6.71%,0%的空间;老年代(O,表示Old)使用了22.53%的空间;永久代使用了96.52%的空间。程序运行以来,共发生Minor GC(YGC,表示Young GC)4次,总耗时0.046秒,发生Full GC(FGC,表示Full GC)0次,Full GC总耗时(FGCT,表示Full GC Time)为0秒,所有GC总耗时(GCT,表示GC Time)为0.046秒。

jinfo:Java配置信息工具

jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机各项参数。使用jps命令的-v参数可以查看虚拟机启动时显式指定的参数列表,但如果想知道未被显式指定的参数的系统默认值,除了去找资料外,就只能使用jinfo的-flag选项进行查询了(如果只限于JDK 1.6或以上版本的话,使用java-XX:+PrintFlagsFinal查看参数默认值也是一个很好的选择),jinfo还可以使用-sysprops选项把虚拟机进程的System.getProperties()的内容打印出来。

jinfo命令格式

option可选参数说明

  • pid 对应jvm的进程id
  • executable core 产生core dump文件
  • [server-id@]remote server IP or hostname 远程的ip或者- hostname,server-id标记服务的唯一性id

option

  • no option 输出全部的参数和系统属性
  • -flag name 输出对应名称的参数
  • -flag [+|-]name 开启或者关闭对应名称的参数
  • -flag name=value 设定对应名称的参数
  • -flags 输出全部的参数
  • -sysprops 输出系统属性
    Javacore 概述
    Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。
    应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。

输出当前 jvm 进程的全部参数和系统属性

输出对应名称的参数

jmap:内存印象工具

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。除了jmap之外,要想获得Java堆转储快照,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数,让虚拟机在OOM异常出现之后自动生成dump文件,通过-XX: +HeapDumpOnCtrlBreak参数则可以使用[Ctrl]+[Break]
键让虚拟机生成dump文件。
除此之外,jmpa还可以查询finalize执行队列、Java堆和永
久代的详细信息,如空间使用率、当前用的是哪种收集器等。

jmap命令格式

//jmap命令格式
[root@localhost ~]#jmap [option] vmid

option可选参数列表

选项 作用
-dump 生成Java堆转储快照。格式为:-dump:[live,]format=b,file=< filename>,其中live子参数说明是否只dump储存活的对象
-finalizerinfo 显示F-Queue中等待Finalizer线程执行finalize方法的对象。仅在Linux/Solaris平台有效
-heap 显示java堆详细信息,如使用哪一种回收器,参数配置,分代状况等。仅在Linux/Solaris平台有效
-histo 显示堆中对象统计信息,包括类,实例数量,合计容量
-permstat 以ClassLoader为统计口径显示永久代内存状态。仅在Linux/Solaris平台有效
-F 当前虚拟机进程对-dump没有相应时,可使用这个选项强制生成dump快照。仅在Linux/Solaris平台有效

使用jmap -heap id查看堆信息


jstack:Java堆栈跟踪工具

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等都是导致线程长时间停顿的常见原因。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做些什么事情,或者等待着什么资源。

jstack命令格式

//jtack命令格式
[root@localhost ~]#jstack [option] vmid

option参数说明

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

查看详细的堆栈信息


在java.lang.Thread类中有一个getAllStackTraces()方法用于获取虚拟机中所有线程的StackTraceElement对象,可以通过该方法将运行中的堆栈信息打印出来。

查看Java虚拟机的运行状态相关推荐

  1. linux查看java虚拟机内存_JVM:查看java内存情况命令

    jmap (linux下特有,也是很常用的一个命令) 观察运行中的jvm物理内存的占用情况. 参数如下: -heap :打印jvm heap的情况 -histo: 打印jvm heap的直方图.其输出 ...

  2. 查看java内存_怎么查看java虚拟机存储空间使用情况

    1.top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者 ...

  3. linux查看java虚拟机内存_深入理解java虚拟机(linux与jvm内存关系)

    本文转载自美团技术团队发表的同名文章 https://tech.meituan.com/linux-jvm-memory.html 一, linux与进程内存模型 要理解jvm最重要的一点是要知道jv ...

  4. JAVA虚拟机内存不够解决办法

    软件152笪世海 1. 查找matlab根路径.在matlab命令行中敲入:matlabroot 显示根路径,如:C:\MATLAB7 2.查看当前Java虚拟机最大堆内存, 敲入:java.lang ...

  5. [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符

    说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...

  6. 【深入理解Java虚拟机】保姆级整理汇总 第一部分:走近Java (一) Java技术体系

    目录 一.开篇感言 二.正文 1.Java技术体系 1.1 Java技术体系介绍 1.2 JDK和JRE范围 1.3 Java主要产品线 1.4 Java发展史 1.5 Java虚拟机家族 一.开篇感 ...

  7. epub java虚拟机精讲_高级 Java 必须掌握:JVM 分析工具和查看命令,超详细!

    来源:http://boendev.iteye.com/blog/882479 jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程 ...

  8. java 查看虚拟机状态_深入理解java虚拟机学习笔记(四)虚拟机性能监控与故障处理工具...

    一.JDK的命令行工具 1.jps:虚拟机进程状况工具 作用:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及查看本地虚拟机唯一id. 参数: m:运行时传入主类的参数: v:虚拟机参数: ...

  9. java虚拟机内存查看相关命令

    关于cmd命令的重定向输出 :[url]http://blog.csdn.net/jw72jw/article/details/7404255[/url] jstack和线程dump分析:[url]h ...

最新文章

  1. 从头开始写框架(一):浅谈JS模块化发展
  2. ubuntu 安装 phpstorm
  3. linux下各种软件安装方法详解
  4. TableView下拉图片放大
  5. CTF刷题网站汇总(包括本地可以自己搭建的)(1)
  6. 微软正在考虑将Windows默认浏览器改为Chromium
  7. centos 6.5 防火墙开放指定端口
  8. [Unity] GameFramework 学习记录 3
  9. 关于从EXCEL中导入到SQL server中的问题
  10. 字节跳动正测试元宇宙社交APP“派岛”
  11. 史上最全的并发编程学习目录
  12. Python绘制数码管(系统时间)
  13. 用python解方程和微积分
  14. 虚拟机安装Linux,设置固态ip,静态ip地址,docker安装
  15. linux 查看大文件,Linux上查找最大文件的 3 种方法
  16. 我自己对英语学习的心得与体会
  17. java多线程运行结果写入文件错误java.io.IOException: Stream closed
  18. Android 实验二:Android MVC模式
  19. 【回答问题】ChatGPT上线了!如何使用控制算法或动力学模型控制PreScan搭建的仿真环境及相关车辆的运动状态?
  20. HC32F460之时钟(晶振)设置

热门文章

  1. 关于this.$emit的返回值的问题
  2. Python数据分析实战之营销组合模型
  3. 批量删微博丨2023简易版本控制台批量删除微博代码
  4. Java代码实现简单的画板
  5. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION security.to_date does not exist
  6. js图解之-图解静态、私有、公有属性和方法的区别
  7. speedoffice(Excel)怎么插入网页链接
  8. 新冠“照妖镜”,体质弱点现原形。你是啥症状?2023年,请好好善待你的身体!
  9. OpenSSL密码库算法笔记——第1.2章 乘法和平方
  10. 透过达达财报看同城零售赛道价值,平台规模化增长后撑起更大价值