JVM如何适配出适合定制项目的需求
「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
标准参数非标准化XX命令Boolean 类型非boolean类型-Xmx -Xms如何查看运行是jvm参数Jps && Jinfojstat 自动导出手动导出MAT分析内存溢出Ubuntu idea安装jprofiler
#JVM 调优参数
随着工作的深入我们慢慢发现仅仅在业务层已经不能满足需求了。高级开发必备只是jvm性能调优。今天开始我将带领大家探索jvm那些事。
标准参数
所谓标准化参数指的是在jdk的各个版本中是不会变化的。类似与Java -version
命令 | 解释 |
---|---|
-help | |
-server -client | |
-version -showversion | |
-cp -classpath |
非标准化
非标准化的就是每个版本中可能会存在细微的变化。
命令 | 解释 |
---|---|
-Xint | 解释执行 |
-Xcomp | 第一次使用就编译成本地代码 |
-Xmind | 混合模式 , jvm 自己来决定是否编译成本地代码 |
XX命令
上面的非标准化命令是 -X ,下面我们介绍的-XX也是非标准化。但是这里的命令主要是用来性能调优的。也是不稳定的命令。
Boolean 类型
格式 : -XX:[+-] 表示启用或禁用name属性
例: -XX:+UseConcMarkSweepGC 使用userConc垃圾回收机制
非boolean类型
格式: -XX:= 表示name的值为value
例 : -XX:MarkGCPauseMills = 500 Gc最大停顿时间是500
-Xmx -Xms
这个表示堆最大最小内存设置, 虽然只有一个-X 但是他却属于 -XX系列的命令
-Xms = -XX:InitialHeapSize 初始化堆大小 -Xmx= -XX:MaxHeapSize 最大堆大小
如何查看运行是jvm参数
-XX:+PrintFlagsInitail :查看一些初始值 -XX:+PrintFlagsFinal : 查看最终值 -XX:+UnlockExperimentalVMOptions 解锁实验参数 -XX:+UnlockDiagnosticVMOptions 解锁诊断参数 -XX:+PrintCommandLineFlags 打印命令行参数
Jps && Jinfo
类似与linux系统的ps。 jps专门查询Java进程的参数
上面我们查看命令的效果时候,所产生的参数内容都是针对当条命令的。但是我们在生产环境都是在一个项目里的。jinfo就是帮助我们查看项目的各个参数的运行情况。当然啦我们首先得通过 ps -ef 命令查看获取当进程的pid.
比如现在我的服务器有一个Java进程 , 他的进程id是5201314 。 这时候我想查看下堆的最大值是多少我们可以这么做。
jinfo -flag MaxHeapSize 5201314
[显示效果]: -XX:MaxHeapSize=268594834
jinfo -flags 表示查看所有参数值
下面是查看是否使用某种垃圾回收机制 + 使用 -禁用
jstat
查看jvm的统计信息 , 包括【类装载信息】、【垃圾回收信息】、【JIT编译信息】
格式: java -options
其中options 包含以下
名称 | 含义 |
---|---|
-class | 类加载 |
-compiler | JIT编译信息 |
-gc | 垃圾回收机制 |
-gccapacity | 堆内存信息 |
-printcompilation |
#jmap
Jmap 是一个可以输出所有内存总对象的工具。甚至可以讲vm中国的heap以二进制的形式输出。打印出某个进程对象情况。
自动导出
-XX:+HeapDumpOnOutOfMemoryErro -XX:+HeapDumpPath=./
手动导出
转载自:https://juejin.cn/post/7062157292115853319