前言

对于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

参考资料

使用JDK自带工具调优JVM的常用命令的更多相关文章

  1. JDK自带工具keytool生成ssl证书

    前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...

  2. 利用JDK自带工具监控JVMCPU和内存指标

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)

    SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具) 搜到大部分打包exe的文章都是使用exe4j打包 步骤贼多,安装麻烦,打包麻烦 收费软件,公司使用会吃律师函 JDK14以上 ...

  4. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)

    性能分析工具jstatjmapjhatjstack 前提概要:         JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jsta ...

  5. jvm性能监控(3)-jdk自带工具 jps jstack jmap

    一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread dump ...

  6. jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码

    一.运行程序TestGC 二.用jps找出当前应用的进程号PID 到jdk安装目录的bin目录下输入: jps -l PID为1264 三.启动Process Explorer(下载地址:https: ...

  7. Tomcat性能调优-JVM监控与调优

    参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...

  8. [转]JDK自带工具之问题排查场景示例

    最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇Java调优经验谈.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://java-performa ...

  9. JDK自带工具之问题排查场景示例

    最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇< Java调优经验谈 >.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://jav ...

  10. JVM调优——JVM监控工具jvisualvm的使用及GC插件安装

    一.前言 在高并发的场景下,我们网站的的访问性能会降低,我们怎么优化,这是个问题!天天听JVM调优,实际上还是不知道怎么调优,调优也是看着网上说的修改一下JVM的堆的空间等等进行的.实际上我们应该在压 ...

随机推荐

  1. 获取android app 的Activity 和 Package

    开头 appium 配置, sdk 配置,jdk配置,adb配置,python配置是我们app 自动化测试必不可少的配置,当然这种配置网上有很多,我们在这里就不展开说了. 直接就开始自动化脚本的dem ...

  2. 2022-04-22:给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X‘ 或者是一个空位 ‘.‘ ,返回在甲板 board 上放置的 战舰 的数量。 战舰

    2022-04-22:给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量. 战舰 ...

  3. vue全家桶进阶之路34:Vue3 路由基本配置

    在Vue3中,路由的基本配置是通过使用Vue Router库来实现的.以下是Vue3中路由的基本配置步骤: 安装Vue Router 使用npm或yarn在项目中安装Vue Router: npm i ...

  4. django--循环调用的解决办法

    不要导入该APP的包,而是加上双引号写入"App.xxx"

  5. ubuntu配置vscode全过程(下载安装配置优化插件)

    一.安装vscode 下载vscode 当然啦,我们安装vscode,当然要先下载啦,但是但是但是!不要在ubuntu的软件中心(Ubuntu Software)下载!贼坑!下载完不能用! 推荐下载方 ...

  6. proto中service 作用的理解

    转载请注明出处: 在 proto 文件中,service 用于定义一组 RPC 方法,在服务端实现这些方法,并在客户端调用这些方法进行远程过程调用. service 的定义方式如下: service ...

  7. IntelliJ IDEA上手这一篇就够了,从入门到上瘾

    前言 每次换电脑,最最最头疼的事情莫过于安装各种软件和搭建开发环境.这算是不想换电脑的一个原因吧(最主要还是穷).除非是电脑坏了开不了机或者点一下卡一下,真不想换电脑.每次换电脑都得折腾好久. 趁着这 ...

  8. 使用 React Three Fiber 和 GSAP 实现 WebGL 轮播动画

    参考:Building a WebGL Carousel with React Three Fiber and GSAP 在线 demo github 源码 效果来源于由 Eum Ray 创建的网站 ...

  9. ABP - 依赖注入(1)

    依赖注入实现了系统之间.模块之间和对象之间依赖关系的解耦,基本上是现代应用程序框架必不可少的一个组成部分. ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Exten ...

  10. 关于SpringBoot AutoConfiguration

    (1)如何导入的自动配置类 首先我们得从@SpringBootApplication注解入手. @SpringBootApplication public class SpringBootDemoAp ...