使用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使用率猛增问题
- 使用top查看java进程的pid
top -p pid
- 在top界面按
H,获取占用CPU最高的线程ID,将线程ID转16进制。 - 使用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
参考资料
- JVM调优工具锦囊
man jmapman jstackman jstatman jinfo
使用JDK自带工具调优JVM的常用命令的更多相关文章
- JDK自带工具keytool生成ssl证书
前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全. 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具: ...
- 利用JDK自带工具监控JVMCPU和内存指标
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)
SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具) 搜到大部分打包exe的文章都是使用exe4j打包 步骤贼多,安装麻烦,打包麻烦 收费软件,公司使用会吃律师函 JDK14以上 ...
- JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)
性能分析工具jstatjmapjhatjstack 前提概要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jsta ...
- jvm性能监控(3)-jdk自带工具 jps jstack jmap
一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id jstack 查看Java线程 jstack -l pid; 做thread dump ...
- jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码
一.运行程序TestGC 二.用jps找出当前应用的进程号PID 到jdk安装目录的bin目录下输入: jps -l PID为1264 三.启动Process Explorer(下载地址:https: ...
- Tomcat性能调优-JVM监控与调优
参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...
- [转]JDK自带工具之问题排查场景示例
最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇Java调优经验谈.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://java-performa ...
- JDK自带工具之问题排查场景示例
最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇< Java调优经验谈 >.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://jav ...
- JVM调优——JVM监控工具jvisualvm的使用及GC插件安装
一.前言 在高并发的场景下,我们网站的的访问性能会降低,我们怎么优化,这是个问题!天天听JVM调优,实际上还是不知道怎么调优,调优也是看着网上说的修改一下JVM的堆的空间等等进行的.实际上我们应该在压 ...
随机推荐
- 【Vue2】NavigationDuplicated: Avoided redundant navigation to current location:xxxxx
翻译过来就是,导航重复:避免了到当前位置的冗余导航. 简单来说就是重复跳转了相同路径 原因 触发这种情况是因为vue-router中引入了primise,当传递了多次重复的参数就会抛出异常,而这种问题 ...
- 2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。
福哥答案2020-10-22: 简单回答:相同点:都是多个单元操作.不同点:LongAdder相加,LongAccumulator自定义计算规则. 中级回答:相同点: LongAddr与LongAcc ...
- 2021-i春秋秋季赛部分misc+re wp
两道re比较简单,没有什么好说的,misc的符号执行那题还有点意思,总的来说题目不难 CTFMakesMeAngr 给出了符号执行的中间语言,对着文档把汇编逻辑逆一下,发现是个凯撒加密,位移为14,注 ...
- WPF 入门笔记 - 03 - 样式基础及控件模板
原学习路线是按照圣殿骑士的<WPF基础到企业应用系列>的路线走的,但是布局之后直接依赖属性学起来有些僵硬,不太好理解,尝试了文章的前部分内容后放弃,调整为本篇博文内容.笔记路线将按照痕迹g ...
- Android APK 文件结构
序言 APK(全称:Android application package,Android应用程序包)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件. APK 文 ...
- [Kotlin Tutorials 22] 协程中的异常处理
协程中的异常处理 Parent-Child关系 如果一个coroutine抛出了异常, 它将会把这个exception向上抛给它的parent, 它的parent会做以下三件事情: 取消其他所有的ch ...
- 如何在.net6webapi中实现自动依赖注入
IOC/DI IOC(Inversion of Control)控制反转:控制反正是一种设计思想,旨在将程序中的控制权从程序员转移到了容器中.容器负责管理对象之间的依赖关系,使得对象不再直接依赖于其他 ...
- .NET指定图片地址下载并转换Base64字符串
需求描述 需要调用第三方图片上传接口上传图片,对方图片格式只能接收Base64字符串.所以我们需要将系统服务器的图片通过Url下载下来,然后转换成Base64字符串.接下来我们将使用HttpClien ...
- 从输入URI到浏览器渲染中间都经历了什么
这篇文章总共分为两个部分,第一部分我会把从输入url到浏览器渲染的整个流程给大致说一下.第二部分我就会一一介绍各个部分的详细作用. 一.从输入url到浏览器渲染的整个流程 1.DNS域名解析 2. ...
- 高效处理报表,掌握原生JS打印和导出报表为PDF的顺畅技巧!
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言篇 在日常工作中,报表打印和导出为PDF是经常要处理的任务 ...