Marvel-Site Marvel-Site
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

Marvel

吾必当乘此羽葆盖车
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • Java

    • Java基础

    • Java进阶

    • Java容器

    • Java并发编程

    • Java虚拟机

      • JVM与Java体系结构
      • JVM内存区域详解
      • JVM类的加载过程详解
      • JVM创建对象过程
      • JVM垃圾回收详解
      • JVM参数设置
      • JVM性能调优工具
        • 1. jps
        • 2. jstack
        • 3. jmap
        • 4. jhat
        • 5. jstat
      • 内存泄漏与内存溢出
    • 常见面试题

  • 计算机基础

  • 框架|中间件

  • 架构

  • 后端
  • Java
  • Java虚拟机
Marvel
2022-09-24
目录

JVM性能调优工具

# JVM 性能调优工具

JDK本身提供了很多方便的 JVM 性能调优监控工具,除了集成式的 VisualVM 和 jConsole 外,还有 jps、jstack、jmap、jhat、jstat、hprof 等小巧的工具,每一种工具都有其自身的特点,用户可以根据你需要检测的应用或者程序片段的状况,适当的选择相应的工具进行检测。

命令 作用
jps 基础工具
jstack 查看某个Java进程内的线程堆栈信息
jmap jmap导出堆内存,然后使用jhat来进行分析
jhat jmap导出堆内存,然后使用jhat来进行分析
jstat JVM统计监测工具
hprof hprof能够展现CPU使用率,统计堆内存使用情况

# 1. jps

JDK提供的一个可以列出正在运行的 JVM 的进程信息的命令行工具,它可以显示 Java 虚拟机进程的执行主类(Main Class,main()函数所在的类)名称、本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息。

[root@ls ~]# jps
2227 lecture-user-0.0.1-SNAPSHOT.jar
36055 jar
2375 lecture-order-0.0.1-SNAPSHOT.jar
2376 lecture-oss-0.0.1-SNAPSHOT.jar
1708 Jps
1
2
3
4
5
6

# 2. jstack

jstack 主要用来查看某个 Java 进程内的线程堆栈信息

命令:jstack [options] pid

options 为 jstack 命令的可选参数。如果没有指定这个参数,jstack 命令会显示 Java 虚拟机当前时刻的线程快照信息。

  • -l:除堆栈外,显示锁的附加信息
  • -F:当请求不被响应时,强制输出线程堆栈
  • -m:混合模式,打印 java 和本地 C++ 调用的堆栈信息

# 3. jmap

jmap(Memory Map)用来查看堆内存使用状况,一般配合jhat命令使用。

语法

jmap [option] pid  
jmap [option] executable core  
jmap [option] [server-id@]remote-hostname-or-ip
1
2
3
参数 作用
-permstat 打印进程的类加载器和类加载器加载的持久代对象信息
-heap 查看进程堆内存使用情况:包括使用的GC算法、堆配置参数和各代中堆内存使用
-histo[:live] 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
-dump:format=b,file=dumpFileName 用jmap把进程内存使用情况dump到文件中,再用jhat分析查看

导出堆内存:如 jmap 1114

查看堆内存使用情况:jmap -heap pid

在这里插入图片描述

# 4. jhat

jhat 用来对上面 dump 出来的内容进行分析,他会在服务器上开启一个端口作为 web 访问的入口,然后将解析出来的数据已 web 的形式提供访问,这对于某些服务器来说可能不允许其开启端口提供访问。

[esv@storm-master Desktop]# jhat -port 8888 /home/esv/dump.dat   
Reading from /home/esv/dump.dat...  
Dump file created Sat Aug 01 04:21:12 PDT 2015  
Snapshot read, resolving...  
Resolving 411123 objects...  
Chasing references, expect 82 dots..................................................................................  
Eliminating duplicate references..................................................................................  
Snapshot resolved.  
Started HTTP server on port 8888  
Server is ready. 
1
2
3
4
5
6
7
8
9
10

# 5. jstat

检查 JVM 的整体运行情况,如 Eden、Survivor、老年代的内存使用情况,还有 Young GC 和 Full gC 的执行次数以及耗时。

比如命令:jstat -gc 2227

[root@ls ~]# jstat -gc 2227
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
19456.0 23552.0 12604.5  0.0   136192.0 40299.3   157184.0   76886.5   87040.0 82226.5 11008.0 10188.4     56    1.321   4      0.818    2.139
1
2
3
S0C From Survivor 区的大小
S1C To Survivor 区的大小
S0U From Survivor 区当前使用的内存大小
S1U To Survivor 区当前使用的内存大小
EC Eden 区的大小
EU Eden 区当前使用的内存大小
OC 老年代的大小
OU 老年代当前使用的内存大小
MC 方法区(永久代、元数据区)的大小
MU 方法区(永久代、元数据区)的当前使用的内存大小
YGC 系统运行迄今为止的 Young GC 次数
YGCT Young GC 的耗时
FGC 系统运行迄今为止的 Full GC 次数
FGCT Full GC 的耗时
GCT 所有 GC 的总耗时

比如命令:jstat -gc PID 1000 10,每隔1秒钟更新出来最新的一行 jstat 统计信息,一共执行10次 jstat 统计

编辑 (opens new window)
上次更新: 2023/08/20, 21:21:52
JVM参数设置
内存泄漏与内存溢出

← JVM参数设置 内存泄漏与内存溢出→

最近更新
01
位运算
05-21
02
二叉树
05-12
03
Spring三级缓存解决循环依赖
03-25
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Marvel
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式