文章目录

  • 前言
  • 一、jps-查看虚拟机进程状况
  • 二、jstat-查看虚拟机统计信息的监控工具
    • 1.使用格式
    • 2.使用案例
  • 三、jinfo-动态修改参数值
  • 四、jmap-将java堆内存做快照
    • 1、使用方式
    • 2、查看堆的分布情况
    • 3、查看堆里面占用内存最多的对象
    • 4、手动导出Dump文件
    • 5、自动导出dump文件
  • 五、jstack-堆栈跟着工具-线程快照

前言

主要是存放在我们的JDK安装目录下面的bin目录,包含了命令行和图形化的工具


一、jps-查看虚拟机进程状况

JVM Process Status tool
类似于linux的ps命令
1、可以列出正在运行的虚拟机进程,并显示虚拟机执行的主类名称以及进行的本地虚拟机唯一id
2、这个命令的结果作为其他命令的基础,因为需要通过id来确定监控的是哪个虚拟机进程

-q #只显示进程号
-m #显示传递给main方法的参数
-l #显示完整的类路径名
-v #显示传递给jvm的参数jps -l
17824 org.jetbrains.jps.cmdline.Launcher
15588 org.jetbrains.idea.maven.server.RemoteMavenServer
16728 sun.tools.jps.Jps
11052
12444 com.classloader.ClassLoaderTest

二、jstat-查看虚拟机统计信息的监控工具

1.使用格式

JVM statistics Monitoring tool
查看虚拟机进程中的类加载,内存,垃圾收集,即时编译等运行时的数据

C:\Users\dong>jstat -help
Usage: jstat -help|-optionsjstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]Definitions:<option>      An option reported by the -options option<vmid>        Virtual Machine Identifier. A vmid takes the following form:<lvmid>[@<hostname>[:<port>]]Where <lvmid> is the local vm identifier for the targetJava virtual machine, typically a process id; <hostname> isthe name of the host running the target Java virtual machine;and <port> is the port number for the rmiregistry on thetarget host. See the jvmstat documentation for a more completedescription of the Virtual Machine Identifier.<lines>       Number of samples between header lines.<interval>    Sampling interval. The following forms are allowed:<n>["ms"|"s"]Where <n> is an integer and the suffix specifies the units asmilliseconds("ms") or seconds("s"). The default units are "ms".<count>       Number of samples to take before terminating.<flag>      Pass <flag> directly to the runtime system.<option> 指定参数,取值范围可以查看 jstat -options查看
<vmid> 如果监控的是本地JVM,使用进程号即可
<lines> 每次抽样几次就列一个标题
<interval> 抽样的周期,默认是单位是毫秒
<count> 采样多少次停止
#每秒刷新一次GC统计信息,采样10次
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
jstat -gc 进程号 1000 10jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

2.使用案例

代码如下(示例):

package com.tool;import java.util.concurrent.*;/*** Created by IntelliJ IDEA.* User: dong* Date: 2020-12-22*/
public class ToolTest {public static void main(String[] args) throws InterruptedException {System.out.println("hello");while (true){byte[] bs = new byte[1024*1024];TimeUnit.SECONDS.sleep(1);}}
}

可以通过程序的运行来观察,我们的内部的运转过程
对象先到Eden去,然后当Eden区满了之后,会触发一次YoungGC
同时会将Eden区和Surivor区的存活对象移动到另一个Survivor区

三、jinfo-动态修改参数值

1、查看当前进程的参数设置
2、在不重启进程的情况下,动态修改当前进程的参数值

#查看
jinfo -flag 参数 进程号
jinfo -flag PrintGC 12988
#-XX:-PrintGC 表示未开启日志打印
#动态修改,开启打印日志
jinfo -flag +PrintGC 12988
#动态修改,关闭打印日志
jinfo -flag -PrintGC 12988
#
jinfo -flag +PrintGCDetails 12988

注意!只是开放了部分参数,允许被动态修改

四、jmap-将java堆内存做快照

Memory Map for Java
通过这个命令来将堆内存转储成快照文件,比如我们说dump文件或headdump文件

1、使用方式

jmap
Usage:jmap [option] <pid>(to connect to running process)jmap [option] <executable <core>(to connect to a core file)jmap [option] [server_id@]<remote server IP or hostname>(to connect to remote debug server)where <option> is one of:<none>               to print same info as Solaris pmap-heap                to print java heap summary-histo[:live]        to print histogram of java object heap; if the "live"suboption is specified, only count live objects-clstats             to print class loader statistics-finalizerinfo       to print information on objects awaiting finalization-dump:<dump-options> to dump java heap in hprof binary formatdump-options:live         dump only live objects; if not specified,all objects in the heap are dumped.format=b     binary formatfile=<file>  dump heap to <file>Example: jmap -dump:live,format=b,file=heap.bin <pid>-F                   force. Use with -dump:<dump-options> <pid> or -histoto force a heap dump or histogram when <pid> does notrespond. The "live" suboption is not supportedin this mode.-h | -help           to print this help message-J<flag>             to pass <flag> directly to the runtime systemjmap [option] <pid>-heap #打印堆的统计信息,新生代,老年代等等信息
-histo[:live] #目的是查看当前堆中对象的占比情况,通常用于查看哪个对象占用的内存最多
-clstats #显示Java堆的类加载器统计信息
-finalizerinfo #
-dump:<dump-options> #生成堆的dump文件
format=b #导出的文件是二进制格式
file=<file> #设置导出dump文件的路径及名称

2、查看堆的分布情况

jmap -heap pid

3、查看堆里面占用内存最多的对象

jmap -histo:live 进程号 #查看存活的对象
jmap -histo 进程号 #查看所有的对象(存活+垃圾)
#linux
jmap -histo 进程号 | head 10 #查看排名前10的记录

4、手动导出Dump文件

#dump文件是堆内存的映射文件
#所以内存越大,dump文件就会越大
jmap -dump:live,format=b,file=dump.bin 进程号

5、自动导出dump文件

package com.zengzhi.tool;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* @author fengqingyang
*/
public class ToolTest {//静态变量可以作为CGRoots//慎用private static List list = new ArrayList<>();public static void main(String[] args) throws InterruptedException {System.out.println("hello");while (true){//为什么到现在还未发生内存溢出?byte[] bs = new byte[100*1024*1024];//list.add(bs);TimeUnit.SECONDS.sleep(1);}}
}

希望当虚拟机发生OOM异常之后,可以将堆内存的信息保存到dump文件中
设置参数:-XX:+HeapDumpOnOutOfMemoryError
生产环境建议开启该参数

五、jstack-堆栈跟着工具-线程快照

Stack Trace for Java
用于生成虚拟机当前的线程快照,一般称为threaddump文件
目的:
线程间发生死锁,死循环,请求外部资源被长期挂起,导致线程长时间挂起停顿

jstack [-l] <pid> #-l 显示线程相关的信息,包括锁的信息

JDK自带的命令行工具相关推荐

  1. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能...

    虚拟机系列文章 深入理解 Java 虚拟机(第一弹) - Java 内存区域透彻分析 深入理解 Java 虚拟机(第二弹) - 常用 vm 参数分析 深入理解 Java 虚拟机-如何利用 Visual ...

  2. 深入理解Java虚拟机-如何利用 JDK 自带的命令行工具监控上百万的高并发的虚拟机性能

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...

  3. jdk自带常用命令行工具使用

    转自:http://blog.csdn.net/winwill2012/article/details/46364923 jps命令使用 jps命令类似于Linux下的ps命令,用于列出当前正在运行的 ...

  4. 面试官:你用过哪些JDK自带的命令行工具

    本文基于HotSpot虚拟机,JDK版本1.8.0_171,windows系统 目录 一.jps:虚拟机进程状况工具 二.jstat:虚拟机统计信息监视工具 三.jmap:Java内存映像工具 四.j ...

  5. PostgreSQL数据库自带的命令行工具--psql

    文章目录 PostgreSQL自带的命令行工具--psql 使用psql连接数据库 psql帮助内容 \copyright 发布条款 \h SQL命令的帮助 \? 元命令帮助 psql元命令实际执行S ...

  6. java性能调试命令_性能测试必备监控技能jvm之jdk命令行工具篇16

    3.png 前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Process Status T ...

  7. 图解JDK命令行工具实例教程

    JDK附带有很多命令行工具,下面先整一下监视虚拟机和故障处理的命令行. 一 jps - 虚拟机进程状况工具 jps不带参数,显示虚拟机进程ID和主类名称或jar名称: 进入命令行,敲入jps;如图: ...

  8. 常用jdk的命令行工具:_jhsdb:JDK 9的新工具

    常用jdk的命令行工具: 我喜欢在分析性能和基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具,并在诸如jcmd , jps , jstat , jinfo , jhat和jmap ...

  9. oracle创建表空间工具,使用sqlplus命令行工具为oracle创建用户和表空间

    这篇文章主要介绍了使用sqlplus为oracle创建用户和表空间的方法,本文介绍的是使用Oracle 9i所带的命令行工具:SQLPLUS,需要的朋友可以参考下 用Oracle10g自带的企业管理器 ...

  10. Java内存泄露和内存溢出、JVM命令行工具、.JDK可视化工具、Java Class文件

    1.Java内存泄露和内存溢出对比 1.1 Java 内存泄露 内存泄露是指一个不再被程序使用的对象或变量还在内存中占用空间. 1.1.1判断内存空间是否符合垃圾回收的标准 在Java语言中,判断一个 ...

最新文章

  1. puppeteer爬虫的奇妙之旅
  2. AS插件-android-selector-chapek
  3. 用小括号表达一个长字符串
  4. 电子工程可以报考二建_非工程类专业可以报考二建吗?哪些省份不限制报考专业?...
  5. 按自己喜欢的方式过一生?
  6. Tomcat 使用apr优化
  7. java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?
  8. mybatis 注解 占位符
  9. go设置后端启动_Go语言基础(十四)
  10. centos7提示ifconfig command not found解决
  11. mapreduce阶段出现pending的原因及解决
  12. python2异步编程_Python3异步编程
  13. Excel表格数据生成sql插入语句
  14. CnOpenData中国行政区划数据
  15. python mp3转wav_python 录音,WAV转MP3
  16. vue3组合式Composition API之ref函数的具体用法
  17. 写给大忙人看的谷歌搜索技巧
  18. 2022年陕西最新建筑八大员(质量员)模拟考试题库及答案解析
  19. 企业公众号文章写作方向要从这几个方面着手
  20. android获取用户手机信息,Android – 使用AccountManager /手机所有者的姓氏和姓氏获取用户数据...

热门文章

  1. GitHub 上有哪些考研神器?
  2. 2017-2018 Petrozavodsk Winter Training Camp, Saratov SU Contest C.Cover the Paths 贪心+DFS
  3. 大学四年就靠这些东西成为别人眼中的大神(工具用好才是硬道理,兵来将挡,水来土掩)
  4. 获取开源医学文献图片(PubMed)制成数据集
  5. 【NOIP模拟】夕阳
  6. Xiangqi UVA - 1589
  7. Java程序实现繁体字转换简体字
  8. WARN: Establishing SSL connection without server‘s identity verification is not recommended. Acco...
  9. Python - 怎么将一个数字拆分成多个随机数字
  10. 咆哮教主网络走红 龅牙哥出台说真相 画皮收视率破新高