使用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

参考资料

相关文章
|
Oracle Java 关系型数据库
win11系统下载安装 jdk8安装与环境变量的配置
win11系统下载安装 jdk8安装与环境变量的配置
1661 0
|
Prometheus Cloud Native Java
OpenTelemetry: 经得起考验的工具
OpenTelemetry: 经得起考验的工具
2581 2
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
传感器
STM32--TIM定时器(1)
STM32--TIM定时器(1)
1091 0
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
404 3
|
Android开发
aTimeLogger--时间追踪工具
aTimeLogger--时间追踪工具
445 0
|
运维 应用服务中间件 网络安全
自动化运维的魔法:使用Ansible进行服务器配置管理
【9月更文挑战第13天】在这篇文章中,我们深入探讨如何利用Ansible这一强大的自动化工具来简化和加速你的服务器配置管理工作。我们将从基础概念出发,逐步引导你了解如何使用Ansible编写Playbooks,实现对服务器群的快速部署、配置更新与维护任务。通过实际案例,你将看到Ansible如何节省时间、减少人为错误并提高运维效率。无论你是初学者还是有经验的运维工程师,这篇文章都将带给你新的视角和启发。
|
监控 安全 固态存储
JVM性能监控与调优之概述命令行篇
JVM性能监控与调优之概述命令行篇
1192 0
JVM性能监控与调优之概述命令行篇
|
编译器 C语言 C++
【C语言】进阶指针(二)—>函数指针与回调函数
【C语言】进阶指针(二)—>函数指针与回调函数
441 0

热门文章

最新文章

下一篇
开通oss服务