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 ...
随机推荐
- ipcs命令详解
基础命令学习目录首页 多进程间通信常用的技术手段包括共享内存.消息队列.信号量等等,Linux系统下自带的ipcs命令是一个极好的工具,可以帮助我们查看当前系统下以上三项的使用情况,从而利于定位多进程 ...
- [shell] 一次性赋值多个变量
管道符是fork子进程,子进程的变量无法传回父进程 [root@XM-v106 ~]# echo "1 2 3" | read a b c;echo $a [root@XM-v10 ...
- 第二阶段Sprint冲刺会议1
进展:总结第一阶段冲刺成就,讨论第二阶段任务,要实现的主要功能,分工及任务认领.
- 今日事——Sprint计划会议
一. Sprint需求: 解屏提醒部分 界面设计 登录功能 备忘功能 成就系统 二.工作认领: 因有成员请假回家,所以延后认领,目前主要任务是学习如何在andriod平台开发并搭建开发环境. 网上 ...
- vs2013+python+ cocos2d-x-3.3rc0环境搭建
1.vs2013安装一路next,安装即可,时间1~2个小时 2.解压cocos2d-x-3.3rc0 build文件夹里会有名为 cocos2d-win32.vc2012的sln文件 打开 ...
- java微信开发之接受消息回复图片或者文本
上回说到 接口连接成功,接下来是真正的开发了. 消息的接收,整个过程就是关注订阅号的用户在微信订阅号中发送消息,微信服务器接收到消息,将消息发给开发者的服务器,服务器接收消息然后可以根据内容进行回复. ...
- Maven教程--02设置Maven本地仓库|查看Maven中央仓库
一:设置Maven本地仓库 Maven默认仓库的路径:~\.m2\repository,~表示我的个人文档:例如:C:\Users\Edward\.m2\repository:如下图: Maven的配 ...
- 一致性Hash算法(KetamaHash)的c#实现
Consistent Hashing最大限度地抑制了hash键的重新分布.另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上.因为使用一般的 ...
- C51学习笔记
转自:http://blog.csdn.net/gongyuan073/article/details/7856878 单片机C51学习笔记 一, C51内存结构深度剖析 二, reg51.头 ...
- 个人作业-week3案例分析
第一部分 软件调研测评(必应词典移动端) 找到的bug: 在词汇量测试中每个单词给用户思考的时间太短,只有五秒钟.导致很多似曾相识的单词还没来得及想起就已经过了.如果说测的是用户记忆深刻的单词,那些记 ...