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 表示查看所有参数值

下面是查看是否使用某种垃圾回收机制 + 使用 -禁用 1

jstat

查看jvm的统计信息 , 包括【类装载信息】、【垃圾回收信息】、【JIT编译信息】

格式: java -options

其中options 包含以下

名称 含义
-class 类加载
-compiler JIT编译信息
-gc 垃圾回收机制
-gccapacity 堆内存信息
-printcompilation

jvm结构图

#jmap

Jmap 是一个可以输出所有内存总对象的工具。甚至可以讲vm中国的heap以二进制的形式输出。打印出某个进程对象情况。

自动导出

-XX:+HeapDumpOnOutOfMemoryErro -XX:+HeapDumpPath=./

手动导出

jmap形式导出

おすすめ

転載: juejin.im/post/7062157292115853319