带你整理面试过程中关于JVM 调优的相关知识
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你整理面试过程中关于JVM 调优的相关知识相关的知识,希望对你有一定的参考价值。
文章目录
一、设置 JVM 参数
JVM 参数:点击可参考
IDEA 配置JVM的初始堆和最大堆均为 10m:
client模式:
初始堆大小:物理内存的1/64,最小为 8MB
最大堆:物理内存没有达到192MB之前,JVM最大堆为物理内存的一半,物理内存大于192MB,但是小于 1GB 时,JVM 最大堆大小为物理内存的 1/4;
大于1GB物理内存时,最大堆为256MB
server模式:
初始堆:与client一致
但是最大堆大小可以更大,比如64位机器4G内存,初始堆为64MB,最大堆为1GB
启动程序开始学习JVM 调优:
二、jps 指令
jps(Java Virtual Machine Process Status Tool)伴随 java 安装,是一个显示当前所有 java 进程 pid 的命令
jps 仅用来查找当前用户的 Java 进程,而不是当前系统的所有进程
具体 [options]选项解析:
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method;
-m:输出main method的参数;
-l:输出完全的包名,应用主类名,jar的完全路径名;
-v:输出jvm参数 ;
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 ;
运行示意:
三、jconsole 指令
JConsole 是一个内置 Java 性能分析器,可以从命令行(直接输入jconsole)或在 GUI shell (jdk\\bin下打开)中运行。
伴随 Java 安装
CMD 窗口执行:jconsole
然后弹出界面中,选择要连接的进程,连接
选择不安全的连接即可:
可以通过 jconsole 查看具体的详细信息
四、jstat 指令
命令格式:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数:
如下表示分析进程id为 22452 的gc情况,每隔1000ms打印一次记录,打印5次停止,每3行后打印指标头部
jstat -gc -h3 22452 1000 10
(1)显示和gc相关的堆信息:jstat -gc
jstat -gc xxxx
对应的指标含义:
(2)显示垃圾收集信息:jstat -gcutil
jstat -gcutil xxxx
其对应的指标含义如下:
(3)显示各个代的容量以及使用情况:jstat -gccapacity
jstat -gccapacity xxxx
其对应的指标含义如下:
五、jstack 指令
jstack 是 java 虚拟机自带的一种堆栈跟踪工具。jstack 用于打印出给定的 java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息
打印的信息和 jconsole 中的图形化线程查看到的一致:
虽然 jconsole 图形化界面很好用,但是服务器并没有图像化界面,所以该指令还是有用的
六、jmap 指令
命令 jmap 是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
指令:
no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。
heap: 显示Java堆详细信息
histo[:live]: 显示堆中对象的统计信息
clstats:打印类加载器信息
finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
dump:<dump-options>:生成堆转储快照
F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.
help:打印帮助信息
J<flag>:指定传递给运行jmap的JVM的参数
例如:dump 生成堆转储快照dump文件。
生成的 dump 文件可以通过 visualvm 进行查看
七、visualvm
JDK14起,已不再集成visualvm,需要自己去visualvm官网下载
下载地址:https://visualvm.github.io/
下载完成后,在etc文件夹下找到visualvm.conf文件,打开,并设置jdk路径。
设置完成保存即可。
然后在bin文件夹下找到visualvm.exe启动程序,启动visualvm
然后就可以使用查看需要的信息:
这里的 heap Dump 就类似与jmap中的 dump 指令:
可以查看具体信息:
也可以对对象的使用情况进行分析
所以可以分析占用内存特别高时可以通过dump分析哪里出问题了,解决问题
也可以加载已下载的 dump 文件:
八、补充
平时运行代码,也可以设置当发生内存溢出时,把代码dump打印出来:
-XX:+HeapDumpOnOutOfMemoryError
可以看到,当发生内存溢出时,会自动dump 堆文件到该程序主目录下
然后通过 visualvm 查看文件可以发现,占用最大的对象是 Integer 对象:
以上是关于带你整理面试过程中关于JVM 调优的相关知识的主要内容,如果未能解决你的问题,请参考以下文章
带你整理面试过程中关于JVM 的运行机制多线程和 JVM 的内存区域的相关知识点