3.2 常用命令

3.2.1 jps

查看java进程

The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.

3.2.2 jinfo

(1)实时查看和调整JVM配置参数

The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.

(2)查看用法

jinfo -flag name PID 查看某个java进程的name属性的值

jinfo -flag MaxHeapSize PID
jinfo -flag UseG1GC PID

(3)修改

参数只有被标记为manageable的flags可以被实时修改

jinfo -flag [+|-] PID
jinfo -flag <name>=<value> PID

(4)查看曾经赋过值的一些参数

jinfo -flags PID

3.2.3 jstat

(1)查看虚拟机性能统计信息

The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.

(2)查看类装载信息

jstat -class PID 1000 10   查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次

(3)查看垃圾收集信息

jstat -gc PID 1000 10

3.2.4 jstack

(1)查看线程堆栈信息

The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.

(2)用法

jstack PID

(4)排查死锁案例

  • DeadLockDemo
//运行主类
public class DeadLockDemo
{public static void main(String[] args){DeadLock d1=new DeadLock(true);DeadLock d2=new DeadLock(false);Thread t1=new Thread(d1);Thread t2=new Thread(d2);t1.start();t2.start();}
}
//定义锁对象
class MyLock{public static Object obj1=new Object();public static Object obj2=new Object();
}
//死锁代码
class DeadLock implements Runnable{private boolean flag;DeadLock(boolean flag){this.flag=flag;}public void run() {if(flag) {while(true) {synchronized(MyLock.obj1) {System.out.println(Thread.currentThread().getName()+"----if获得obj1锁");synchronized(MyLock.obj2) {System.out.println(Thread.currentThread().getName()+"----if获得obj2锁");}}}}else {while(true){synchronized(MyLock.obj2) {System.out.println(Thread.currentThread().getName()+"----否则获得obj2锁");synchronized(MyLock.obj1) {System.out.println(Thread.currentThread().getName()+"----否则获得obj1锁");}}}}}
}
  • 运行结果

  • jstack分析

把打印信息拉到最后可以发现

3.2.5 jmap

(1)生成堆转储快照

The jmap command prints shared object memory maps or heap memory details of a specified process, core file, or remote debug server.

(2)打印出堆内存相关信息

jmap -heap PID
jinfo -flag UsePSAdaptiveSurvivorSizePolicy 35352
-XX:SurvivorRatio=8

(3)dump出堆内存相关信息

jmap -dump:format=b,file=heap.hprof PID

(4)要是在发生堆内存溢出的时候,能自动dump出该文件就好了

一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

设置堆内存大小: -Xms20M -Xmx20M
启动,然后访问localhost:9090/heap,使得堆内存溢出

dump出该文件就好了

一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

设置堆内存大小: -Xms20M -Xmx20M
启动,然后访问localhost:9090/heap,使得堆内存溢出

JVM成神之路(十一) -- JVM常用命令解析相关推荐

  1. JVM成神之路-Java内存模型(JMM)

    Java 内存模型基础 什么是 Java 内存模型(JMM-共享内存模型) 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量 ...

  2. JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化

    Java编译原理 什么是字节码.机器码.本地代码? 字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码 机器码和本地代码都是指机器可以直接识别运行的代码,也就 ...

  3. JVM成神之路-JVM内存结构

    线程私有 程序计数器 当前线程所执行的字节码的行号指示器 对于 Java 方法,记录正在执行的虚拟机字节码指令的地址:对于 native 方法,记录值为空(Undefined) 唯一一个Java 虚拟 ...

  4. JVM成神之路-类加载机制-双亲委派,破坏双亲委派

    概述 概念 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接时候用的Java类型. 类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存 ...

  5. JVM成神之路-Java垃圾回收

    Java垃圾回收机制 为什么要进行垃圾回收? 随着程序的运行,内存中存在的实例对象.变量等信息占据的内存越来越多,如果不及时进行垃圾回收,必然会带来程序性能的下降,甚至会因为可用内存不足造成一些不必要 ...

  6. JVM成神之路(二)-- JDK,JER与JVM的关系

    关于文章 JVM系列每一篇文章我都录制了对应的视频,由于CSDN不能直接发送视频资料,如果想要作者录制的免费视频资料,可以加QQ:3139882589.这个是作者QQ,如果有问题想跟作者咨询,也可以加 ...

  7. JVM成神之路-JVM引用模型

    本文通过探析Java中的引用模型,分析比较强引用.软引用.弱引用.虚引用的概念及使用场景,知其然且知其所以然,希望给大家在实际开发实践.学习开源项目提供参考. Java的引用 对于Java中的垃圾回收 ...

  8. JVM成神之路-Java对象模型

    首先我们要知道: 在jvm的内存结构中,对象保存在堆中,而我们在对对象进行操作时,其实操作的是对象的引用. Java对象包含三个部分 一个Java对象可以分为三部分存储在内存中,分别是:对象头(Hea ...

  9. (八)JVM成神路之GC分区篇:G1、ZGC、ShenandoahGC高性能收集器深入剖析

    引言 在<GC分代篇>中,我们曾对JVM中的分代GC收集器进行了全面阐述,而在本章中重点则是对JDK后续新版本中研发推出的高性能收集器进行深入剖析,但在开始前,先来看看JDK的发布记录中关 ...

最新文章

  1. 后退到的页面为什么没有执行js_为什么中层没有执行力?
  2. 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)
  3. Spring Boot 内置Tomcat——getServletContext().getRealPath()为临时目录问题解决方案
  4. 漫画 | 你真的会用烙铁焊接吗?
  5. CentOS Linux 7编译安装Redis
  6. ga设置迭代次数_种群进化+邻域搜索的混合算法(GA+TS)求解柔性作业车间调度问题(FJSP)算法介绍...
  7. 【JZOJ4910】【NOIP2017模拟12.3】子串
  8. mysql中乘积函数_Mysql中的函数
  9. 颠覆Web前端开发的HTML5技术
  10. Word:快速插入水平分隔线(转)
  11. gcc: error trying to exec ‘cc1plus‘: execvp: Permission denied
  12. 唐宋边塞诗词中的古灵州
  13. 金明的预算budget题解
  14. 防止表单重复提交的问题
  15. Python切割图集
  16. 2019清华计算机考研名单,2019年清华大学硕士研究生拟录取名单公示(清华MBA,考生编号排序)...
  17. C Primer Plus 第五章 编程练习
  18. ant脚本编译java_1.4 在Ant中编译Java代码
  19. camera打开闪光灯页面崩溃 android,Android打开闪光灯关键代码
  20. 杭电4510—小Q系列故事—为什么时光不能倒流

热门文章

  1. 【Unity项目实战】主程进阶之路文章整理
  2. vue 配置 JSX语法
  3. 数据库中创建存储过程的方法
  4. 九度题目1173:查找
  5. 鸿蒙系统桌面有斜纹,十代酷睿i9+AMD RX 640独显:戴尔发布OptiPlex 7080 Micro瘦客机...
  6. 功率放大器三种工作状态
  7. javaWeb实现qq邮箱验证(二)
  8. 【一起撸个DL框架】1 绪论
  9. 《刘慈欣的思想实验室》笔记
  10. C++头文件<bits/stdc++.h>详解