JVM性能监控与优化
2021-08-14 08:17:40 0 举报
AI智能生成
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方法的对象
仅支持linux、solaris平台有效
-F
当虚拟机进程对-dump选项没有任何响应时,可以是用此选项强制执行生成dump文件
仅支持linux、solaris平台有效
-h | help
jmap工具使用的帮助命令
-J <flag>
传递参数给jmap启动的jvm
使用1:导出内存映像文件
手动方式
jmap -dump:format=b,file=<filename.hprof> <pid>
jmap -dump:live,format=b,file=<filename.hprof> <pid>
自动方式
-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
等价于-XX:InitialHeapSize, 设置JVM初始内存大小
-Xmx800m
等价于-XX:MaxHeapSize, 设置最大堆内存大小
-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相关的选项
-XX:+HeapDumpOnOutOfMemoryError
表示在内存出现OOM的时候,把Heap转存到文件以便后续分析
打印设置的XX选项及值
-XX:+PrintCommandLineFlags
可以让在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
-XX:+PrintFlagsInitial
表示打印出所有XX选项的默认值
-XX:+PrintFlagsFinal
表示打印出XX选项在运行程序时生效的值
-XX:+PrintVMOptions
打印JVM的参数
-XX:+HeapDumpBeforeFullGC
表示在出现FUllGC之前,生成Heap转储文件
-XX:HeapDumpPath=<Path>
指定Heap转存文件的存储路径
-XX:OnOutOfMemoryError
指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本
垃圾收集相关选项
查看默认垃圾回收器
Serial回收器
Serial Old回收器
Parallel Scavenge回收器
Parallel New回收器
CMS回收器
G1回收器
Mixed GC调优参数
怎么选择垃圾回收器
GC日志相关选项
常用参数
其它参数
其它参数
通过Java代码获取内存信息
java.lang.management
Runtime
分析日志
GC日志分析工具
GCEasy
基本概述
GCViewer
基本概述
安装
其它工具
GChisto
官网上没有下载的地方,需要自己从SVN上拉下来
不过这个工具视乎没怎么维护,存在不少bug
HpJmeter
工具很强大,但只能打开由一下参数生成的GClog,-werbose:gc
-Xloggc:gc.log 添加其它参数生成的gc.log无法打开
-Xloggc:gc.log 添加其它参数生成的gc.log无法打开
Hpjmeter集成 了以前HPJtune功能,可以分析在HP机器上产生的垃圾回收日志
0 条评论
下一页
为你推荐
查看更多