使用JDK自带工具调优JVM的常用命令

简介: 使用JDK自带工具调优JVM的常用命令

前言

对于Java进程常见问题,可以通过JVM监控工具(比如Prometheus)、Arthas等,或者使用JDK自带的工具。如果第三方监控工具线上没有的话,对jdk自带的工具就要多熟悉熟悉。

线上Java进程运行常见问题:

  • 内存溢出,OutOfMemoryError
  • CPU使用率猛增
  • JVM参数调优

jmap用法

  • 查看java进程内存占用情况。通过这个命令,可以看出哪些对象最消耗内存。输出结果最后有Total统计结果。
jmap -histo pid
  • 查看堆内存占用情况
jmap -heap pid
  • 导出dump内存溢出的文件,并导入到jvisualvm客户端进行查看。
jmap -dump:file=a.dump pid
# 或者设置JVM参数:-XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=./a.dump

使用jstack排查java进程占用CPU使用率猛增问题

  1. 使用top查看java进程的pid
top -p pid
  1. 在top界面按H,获取占用CPU最高的线程ID,将线程ID转16进制。
  2. 使用jstack查看该线程ID堆栈信息
# 假设进程ID为7147,线程ID的十进制为7163,十六进制为1bfb
jstack 7147 | grep -A 10 -B 10 1bfb

jstat用法

  • 垃圾回收统计
jstat -gc pid
# S0C: 第一个survivor区的容量
# S1C: 第二个survivor区的容量
# S0U: 第一个survivor区已使用的容量
# S1U: 第二个survivor区已使用的容量
# EC: Eden区的容量
# EU: Eden区的使用量
# OC: Old区的容量
# OU: Old区的使用量
# MC: Metaspace的容量
# MU: Metaspace的使用量
# CCSC: 压缩指针的容量
# CCSU: 压缩指针的使用量
# YGC: YoungGC的次数
# YGCT: 本次YoungGC耗时
# FGC: Full GC的次数
# FGCT: 本次Full GC耗时
# GCT: 总的GC耗时
  • 连续观察gc情况
# 每隔1000ms打印一次,总共打印10次
jstat -gc pid 1000 10
  • 堆内存情况
jstat -gccapacity pid
# NGCMN: 新生代最小容量
# NGCMX: 新生代最大容量
# NGC: 当前新生代容量
# S0C: 第一个Survivor区大小
# S1C: 第二个Survivor区大小
# EC: Eden区的大小
# OGCMN: 老年代最小容量
# OGCMX: 老年代最大容量
# OGC: 当前老年代大小
# OC: 当前老年区大小
# MCMN: 最小元数据容量
# MCMX: 最大元数据容量
# MC: 当前元数据空间大小
# CCSMN: 最小压缩类空间大小
# CCSMX: 最大压缩类空间大小
# CCSC: 当前压缩类空间大小
# YGC: 年轻代gc次数
# FGC: 老年代GC次数
  • 新生代gc统计
jstat -gcnew pid
  • 新生代堆内存情况
jstat -gcnewcapacity pid
  • 老年代gc统计
jstat -gcold pid
  • 老年代堆内存情况
jstat -gcoldcapacity pid
  • 元空间堆内存情况
jstat -gcmetacapacity pid
  • 整体情况
jstat -gcutil pid
# S0: Survivor 1区的使用比例
# E: Eden区使用比例
# ...

使用jinfo查看jvm参数

# 包含flags和sysprops的信息
jinfo pid
# 只有自定义的jvm参数
jinfo -flags pid
# 只有系统参数
jinfo -sysprops pid

参考资料

相关文章
|
3月前
|
存储 算法 Java
jvm性能优化(一)-基于JDK1.8
jvm性能优化(一)-基于JDK1.8
|
3月前
|
存储 监控 算法
jvm-性能调优(二)
jvm-性能调优(二)
|
18天前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
16天前
|
监控 Java 编译器
Java虚拟机调优实战指南####
本文深入探讨了Java虚拟机(JVM)的调优策略,旨在帮助开发者和系统管理员通过具体、实用的技巧提升Java应用的性能与稳定性。不同于传统摘要的概括性描述,本文摘要将直接列出五大核心调优要点,为读者提供快速预览: 1. **初始堆内存设置**:合理配置-Xms和-Xmx参数,避免频繁的内存分配与回收。 2. **垃圾收集器选择**:根据应用特性选择合适的GC策略,如G1 GC、ZGC等。 3. **线程优化**:调整线程栈大小及并发线程数,平衡资源利用率与响应速度。 4. **JIT编译器优化**:利用-XX:CompileThreshold等参数优化即时编译性能。 5. **监控与诊断工
|
27天前
|
存储 监控 Java
JVM进阶调优系列(8)如何手把手,逐行教她看懂GC日志?| IT男的专属浪漫
本文介绍了如何通过JVM参数打印GC日志,并通过示例代码展示了频繁YGC和FGC的场景。文章首先讲解了常见的GC日志参数,如`-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps`等,然后通过具体的JVM参数和代码示例,模拟了不同内存分配情况下的GC行为。最后,详细解析了GC日志的内容,帮助读者理解GC的执行过程和GC处理机制。
|
2月前
|
JavaScript 前端开发 Java
jvm的jshell,学生的工具
本文介绍了JVM的jshell工具,它为Java平台添加了REPL(读取-评估-打印循环)功能,使得学习、探索编码和原型代码变得更加便捷,但作者认为其在实际开发中较为鸡肋。
34 1
jvm的jshell,学生的工具
|
2月前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
2月前
|
监控 架构师 Java
JVM进阶调优系列(6)一文详解JVM参数与大厂实战调优模板推荐
本文详述了JVM参数的分类及使用方法,包括标准参数、非标准参数和不稳定参数的定义及其应用场景。特别介绍了JVM调优中的关键参数,如堆内存、垃圾回收器和GC日志等配置,并提供了大厂生产环境中常用的调优模板,帮助开发者优化Java应用程序的性能。
|
2月前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
55 2
|
2月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
51 3