Java虚拟机性能监控与调优
1 基于JDK命令行工具的监控
1.1 JVM的参数类型
1.1.1 标准参数
在JVM的各个版本基本上保持不变,很稳定的。
-help
-server -client
-version -showversion
-cp -classpath
1.1.2 X参数
非标准化参数
-Xint: 解释执行
-Xcomp: 第一次使用就编译成本地代码
-Xmixed: 混合模式,JVM自己来决定是否编译成本地代码
1.1.3 XX参数
非标准化参数
相对不稳定
主要用于JVM调优和Debug
Boolean类型
格式:-XX:[+-]<name>表示启用或者禁用name属性
比如:-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
非Boolean类型
格式:-XX:<name>=<value>表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500
-XX:GCTimeRatio=19
-Xmx -Xms
-Xms等价于-XX:InitialHeapSize
-Xmx等价于-XX:MaxHeapSize
| 命令 | 作用 |
| ps -ef|grep java | 查看java的进程相关信息,以及启动的配置信息 |
| jinfo -flag MaxHeapSize pid | 查看该pid的JVM最大的堆内存大小 |
| jinfo -flag ThreadStackSize pid | 查看该pid的JVM每个线程的栈大小 |
1.2 运行时JVM参数查看
-XX:+PrintFlagsInitial
初始值
-XX:+PrintFlagsFinal
最终值

= 表示默认值
:= 被用户或者JVM修改后的值
-XX:+UnlockExperimentalVMOptions 解锁实验参数
-XX:+UnlockDiagnosticVMOptions 解锁诊断参数
-XX:+PrintCommandLineFlags 打印命令行参数
jps
类似与Linux服务器上的ps功能。
相关命令:
jps -help 查看帮助
jps -l 查看正在运行的列表
jps命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html
jinfo命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html#BCGEBFDD
jstack命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html#BABGJDIF
jmap命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html#CEGCECJB
jinfo
查看正在运行的JVM里面的参数值。
相关命令:jinfo -flag MaxHeapSize pid 查看正在运行的进程为PID的JVM的最大堆内存
jinfo -flags pid 查看正在运行的进程为PID的JVM的已经被修改过的JVM的参数值
查看最大内存

查看垃圾回收器

1.3 jstat查看虚拟机统计信息
类装载
jstat命令详细参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE
参考命令:jstat -class pid 查看类加载的信息
jstat -class pid 1000 10 每隔1000ms打印一次类加载信息,打印10次。

垃圾收集
参考命令:jstat -gc pid 查看进程号为pid的JVM的垃圾收集信息,具体响应详细参数jstat命令详细参考
jstat -gc pid 1000 10 每隔1000ms打印一次进程号为pid的JVM的垃圾收集信息,打印10次。

JIT编译
参考指令:jstat -compiler pid 查看进程号为pid的JVM的即时编译信息。

2 Jmap+MAT实战内存溢出

2.1 模拟对内存溢出的代码参考:
2.2 如何导出内存映像文件
2.2.1 内存溢出自动导出
程序启动的时候,设置以下参数
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
2.2.2 使用jmap命令手动导出
jmap -dump:format=b,file=heap.hprof pid 导出进程号为pid的JVM的dump文件
jmap -heap pid 打印进程号为pid的JVM的堆信息
jmap命令
option: -heap, -clstats, -dump:<dump-options>, -F
更多详细命令参考:jmap命令详细介绍参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html#CEGCECJB
2.3 MAT分析内存溢出
MAT工具下载地址:http://www.eclipse.org/mat/downloads.php
将步骤2.2导出的dump文件,用MAT工具打开分析。
2.4 JAVA线程状态
NEW WAITING RUNNABLE TIMED_WAITING BLOCKED TERMINATED
更多详细信息参考:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr034.html
3 实战死循环导致CPU飙高
查找死循环导致CPU飙高问题的常用指令:
top -p pid -H #打印该进程的所有线程,查看占用CPU资源超高的线程ID,该线程ID为10进制,要用下面的命令将其转换为16进制,然后在stack信息中查找详细信息
printf "%x" 十进制的线程id #将十进制的线程id转换为16进制
jstack pid #打印程序的stack信息,从中找出CPU占用超过的线程ID的stack信息
也可以参考:https://www.cnblogs.com/alsodzy/p/10188691.html,来排查CPU飙高的问题。
Java虚拟机性能监控与调优的更多相关文章
- Java虚拟机性能监控与调优实战
From: https://c.m.163.com/news/a/D7B0C6Q40511PFUO.html?spss=newsapp&fromhistory=1 Java虚拟机性能监控与调 ...
- Java项目性能监控和调优工具-Javamelody的学习总结
1.简介: JavaMelody能够在运行环境监测Java或Java EE应用程序服务器.并以图表的形式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http ...
- JAVA性能监控与调优参考文档链接
JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...
- Java生产环境下性能监控与调优详解
1:JVM字节码指令与 javapjavap <options> <classes>cd monitor_tuning/target/classes/org/alanhou/m ...
- Java生产环境下性能监控与调优详解视频教程 百度云 网盘
集数合计:9章Java视频教程详情描述:A0193<Java生产环境下性能监控与调优详解视频教程>软件开发只是第一步,上线后的性能监控与调优才是更为重要的一步本课程将为你讲解如何在生产环境 ...
- <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- <JVM下篇:性能监控与调优篇>03-JVM监控及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- <JVM下篇:性能监控与调优篇>01-概述篇-02-JVM监控及诊断工具-命令行篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
随机推荐
- Vue+webpack报错: listen EADDRINUSE: address already in use :::8080
如果本地运行多个vue+webpack项目会报错:listen EADDRINUSE: address already in use :::8080: 提示含义:地址端口已经被占用 注:8080指的是 ...
- JS特效@缓动框架封装及应用
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.变量CSS样式属性获取/赋值方法 给属性赋值:(既能获取又能赋值) 1)div.style.width 单个赋值:点语法,这个方法比较固定 ...
- 2017-2018-2学期 20172324《Java程序设计》第六周学习总结
20172324<Java程序设计>第六周学习总结 教材学习内容总结 如何创建数组以及int[] X与int X[]的区别(编译时是没有差别的,只是前者与其他类型的声明方式有一致性) 每一 ...
- 1001 A+B
代码链接 PDF链接 首先要说的是这道题的难点是如何把数字输出加入逗号,毕竟数据范围并没有超过Long.当然这个难点也不是问题,将数字转为字符串,C中就有这样的函数,然后再用 %3==0 这样来控制输 ...
- 面向对象程序设计第三次作业-Calculator
题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...
- 现代软件工程构建之法 前五章阅读感想&困惑
第一章 第一节 新时代中国的IT产业市场规则不规范,书中提到社会上有个别软件公司的软件一定要卸载别家公司的软件才能运行,我这里感到疑惑---————是不是说如果 一间软件公司他能做出一个像微软操作系统 ...
- Journal entry of the eleventh chapter to chapter twelfth
第十一章:正如很多人一样,觉得软件工程这个课程好像没什么用,感觉提高不了自己的写代码能力,学的都是理论知识,好像对于我们这种技术类的专业离得有点远,是这样的吗? 第十二章:每样东西都没有完美的,即使我 ...
- VMware上配置DPDK环境并运行实例程序
1. 在虚拟机VMware上配置环境 VMware安装:http://www.zdfans.com/html/5928.html Ubuntu:https://www.ubuntu.com/downl ...
- Week-4-作业1
前言 经过了上周作业的学习拾遗,让我学到了很多东西,也能更好的阅读<构建之法>这本书,下面是我在阅读过第四章和第十七章之后想到的一些问题. 第四章 4.2.1 关于缩进,书中说用四个空格刚 ...
- angularJS1笔记-(8)-内置指令
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...