JVM性能监控与优化
2021-08-14 08:17:40 0 举报
AI智能生成
JVM性能监控与优化
作者其他创作
大纲/内容
JVM性能监控及诊断工具
命令行工具
jps:查看正在运行的Java进程
基本情况
基本语法
options参数
hostid参数
jstat:查看JVM统计信息
option参数
interval参数
用于指定输出统计数据的周期,单位为毫秒。即:查询间隔
count参数
用于打印查询的次数
-t参数
显示程序执行的总时间,单位:秒
经验
-h参数
可以在周期性数据输出时,输出多少行数据后输出一个表头信息
补充
jinfo:实时查看和修改JVM配置参数
拓展
java -XX:+PrintFlagsInitial -version
查看JVM参数启动的初始值
java -XX:PrintFlagsFinal
查看JVM参数的最终值
java -XX:PrintCommandLineFlags -version
jmap:导出dump文件&内存使用情况
-heap
输出整个空间的详细信息,包括GC的使用,堆配置信息、以及内存的使用情况等
-dump
生成java堆转出快照:dump文件
特别的:-dump:live只保存堆中存活的对象
-histo
输出堆中对象的统计信息,包括类、实例数量和合计容量
特别的:-histo:live 只统计堆中存活的对象
-permstat
以ClassLoader为统计口径输出永久代的内存状态信息
仅支持linux、solaris平台有效
-finalizeinfo
显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-F
当虚拟机进程对-dump选项没有任何响应时,可以是用此选项强制执行生成dump文件
-h | help
jmap工具使用的帮助命令
-J <flag>
传递参数给jmap启动的jvm
使用1:导出内存映像文件
手动方式
自动方式
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=<filename.hprof>
使用2:显示堆内存相关信息
jmap -heap pid
jmap -histo
使用3:其他作用
jmap -permstat pid
jmap -finalizerinfo
小结
jhat:Jdk自带的堆分析工具
jstack:打印JVM中线程栈快照
-F
当正常输出的请求不被响应是,强制输出线程堆栈
-l
除堆栈外,显示关于锁的附加信息
-m
如果调用本地的方法,可以显示C/C++的堆栈
-h
帮助操作
jcmd:多功能命令行
jcmd -l
列出所有的JVM进程
jcmd pid help
针对指定的进程,列输出所有支持的命令
jcmd pid 具体命令
显示指定进程的指令的数据
jstatd:远程主机信息收集
GUI图形化工具
jconsole
Visual VM
插件安装
VisualVM
Idea的插件:VisualVM Launcher
连接方式
本地连接
监控本地Java进程的CPU、类、线程
远程连接
1.确定远程服务的ip地址
2.添加JMX(通过JMX技术具体监控远端服务哪个进程)
3.修改bin/catalina.sh文件,连接远程Tomcat
4.在.../conf中添加jmxremote.access和jmxremote.password文件
5.将服务器地址改为公网ip地址
6.设置阿里云安全策略和防火墙策略
7.启动tomcat,查看tomcat启动日志和端口监听
8.Jmx中输入端口、用户名、密码登录
主要功能
1.生成/读取堆内存快照
2.查看JVM参数和系统属性
3.查看运行中的虚拟机进程
4.生成/读取线程快照
5.程序资源的实时监控
6.其他功能
JMC代理链接
远程环境监控
CPU分析和内存分析
JMC:Java Mission Control
Eclipse MAT(主要分析Dump文件)
JProfiler
基本概述
介绍
特点
基本功能
方法调用
内存分配
线程和锁
高级子系统
安装与配置
Jprofiler配置Idea
Idea中配置Jprofiler
具体使用
数据采集方式
重构模式(Instrumentation)
抽样模式(Sampling)
遥感监测
内存视图
堆遍历
CPU视图
线程视图
监视器&锁
Arthas
安装与使用
相关诊断指令
Btrace
其它工具
Flame Graphs(火焰图)
Tprofiler
YouKit
Jprobe
Spring Insight
常用的JVM参数选项
1.JVM参数选项类型
类型一:标准的参数选项,-help 显示的
类型二:-X参数选项
非标准的参数
以-X开头
各种选项
运行java -X 查看所有的选项
JVM的JIT编译模式相关的选项
-Xint
禁用JIT,所有字节码都被解释执行,这个模式的速度慢
-Xcomp
所有字节码第一次使用就被编译到本地代码,然后再执行
-Xmixed
混合模式,让JIT根据程序运行的情况,有选择的将某些进行字节码进行编译
特别的
-Xms -Xmx -Xss属于属于XX参数?
-Xms<size> 设置初始Java堆大小,等价于-XX:initialHeapSize
-Xmx<size> 设置最大的Java堆大小,等价于-XX:MaxHeapSize
-Xss<size> 设置Java线程堆栈大小,等价于-XX:ThreadStackSize
类型三:-XX参数选项
非标准化参数
使用最多的参数类型
以-XX开头,这类选项属于实验性的,不稳定
作用
用于开发和调试
分类
Boolean类型格式
-XX:+<options> 表示启动option属性
-XX:-<option> 表示禁用option属性
说明:因为有的指令默认是开启,所有可以使用-关闭
非Boolean类型格式(key-value类型)
子类型1:数值类型 -XX:<option>=<number>
子类型2:非数值格式-XX:<name>=<string>
-XX:+PrintFlagsFinal
输出所有参数的名称和默认值
默认不包括Diagnostic和Experimental的参数
可以配合-XX:+UnlockDiagnostVMOptions和-XX:UnlockExperimentalVMOptions使用
2.添加JVM参数选项
Eclipse
IDEA
运行时候Jar包
通过tomcat运行的war包
程序运行过程中
jinfo -flags
3.常用的JVM参数选项
堆、栈、方法区等内存设置
栈
-Xss128k
设置每个线程的栈大小为128k
等价于-XX:ThreadStackSize
堆内存
-Xms800m
-Xmx800m
-Xmn3g
设置年轻代大小
-XX:NewSize=1024m
设置年轻代初始的大小
-XX:MaxNewSize=1024m
设置年轻代最大值为1024m
-XX:SurvivorRatio=8
设置年轻代中Eden区域一个Survivor区的比值。默认为8,关闭:-XX:-UseAdptiveSizePolicy,并且显示-XX:SurvivorRatio=8
-XX:+UseAdptiveSizePolicy
自动选择各区大小比例
-XX:NewRatio=4
设置老年代与年轻代的比值
-XX:PretenureSizeThreadshold=1024
设置让大于此阈值的对象直接分配在老年代,单位为字节
只对Serial、ParNew收集器有效
-XX:MaxTenuringThreshold=15
默认值为15
新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值就进入老年代
-XX:PrintTenuringDistribution
让JVM在每次MinorGc结束打印当前使用的Surivivor中对象的年龄分布
-XX:TargetSurvivorRatio
表示MinorGC结束后Survivor区域中占用空间的期望比例
方法区
永久代
-XX:PermSize=256m
设置永久代初始值大小
-XX:MaxPermSize=256m
设置永久代最大值
元空间
-XX:MetaspaceSize
初始化空间大小
-XX:MaxMetaspaceSize
最大空间,默认值没有限制,有物理内存决定
-XX:UseCompressOops
压缩对象指针
-XX:+UseCompressClassPointers
压缩类指针
-XX:CompressedClassSpaceSize
设置class Metaspace的大小,默认1G
直接内存
-XX:MaxDirectMemorySize
指定DirectMemory容量,若未指定,则默认与Java堆最大值一样
OutOfMemory相关的选项
表示在内存出现OOM的时候,把Heap转存到文件以便后续分析
打印设置的XX选项及值
-XX:+PrintCommandLineFlags
可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
-XX:+PrintFlagsInitial
表示打印出所有XX选项的默认值
表示打印出XX选项在运行程序时生效的值
-XX:+PrintVMOptions
打印JVM的参数
-XX:+HeapDumpBeforeFullGC
表示在出现FUllGC之前,生成Heap转储文件
-XX:HeapDumpPath=<Path>
指定Heap转存文件的存储路径
-XX:OnOutOfMemoryError
指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本
垃圾收集相关选项
垃圾回收器搭配使用图
查看默认垃圾回收器
Serial回收器
Serial Old回收器
Parallel Scavenge回收器
Parallel New回收器
CMS回收器
G1回收器
G1_New.png
Mixed GC调优参数
Mixed.png
怎么选择垃圾回收器
怎么选择垃圾回收器.png
GC日志相关选项
常用参数
Gc日志常用参数.png
其它参数
Gc其它参数.png
通过Java代码获取内存信息
java.lang.management
Runtime
分析日志
GC日志分析工具
GCEasy
GCViewer
安装
GChisto
官网上没有下载的地方,需要自己从SVN上拉下来
不过这个工具视乎没怎么维护,存在不少bug
HpJmeter
工具很强大,但只能打开由一下参数生成的GClog,-werbose:gc -Xloggc:gc.log 添加其它参数生成的gc.log无法打开
Hpjmeter集成 了以前HPJtune功能,可以分析在HP机器上产生的垃圾回收日志
0 条评论
回复 删除
下一页