JVM(三):JVM命令与参数

news2025/1/12 3:03:31

JVM命令与参数

文章目录

  • JVM命令与参数
    • JVM参数
      • 标准参数
      • -X 参数
      • -XX参数
      • 其他参数
      • 说明
      • 常用参数的意义
    • 常用命令
      • jps
      • jinfo
      • jstat
      • jstack
      • jmap
    • 常用工具
      • jconsole
      • jvisualvm
      • 内存分析工具 MAT
      • GC日志分析工具
      • 内存分析工具 MAT
      • GC日志分析工具

经过前面的各种分析学习,我们知道了关于JVM很多的知识,包括版本信息,类加载,堆,方法区,垃圾回收等,这一章我们来好好聊一聊关于怎么将这些内容进行直观地展示在我们面前,包括怎么进行相应地一些设置。

JVM参数

标准参数

  • -version
  • -help
  • -cp

image-20221006150329154

-X 参数

非标准参数,也就是在JDK各个版本中可能会变动

  • -Xint 使用解释模式,启动很快,执行稍慢
  • -Xcomp 使用纯编译模式,执行很快,启动很慢
  • -Xmixed 默认为混合模式,开始解释执行,启动速度较快,对热点代码实行检测和编译

image-20221006151127165

-XX参数

使用得最多地参数类型,非标准化参数,相对不稳定,主要用于JVM调优和Debug

  1. Boolean类型

    格式:-XX[±] <name> +或- 表示启用或者禁用name属性

    比如:-XX:+UseConcMarkSweepGC 表示启用CMS类型的垃圾回收器

    ​ -XX:+UseG1GC 表示启用G1类型的垃圾回收器

  2. 非Boolean类型

    格式:-XX:<name>=<value>表示name属性的值是value

    比如:-XX:MaxGCPauseMillis=500 表示GC最大停顿时间为500毫秒

想要设置的话,得先知道默认JVM中参数相关的信息

下面这个针对的是Java这个进程

java -XX:+PrintFlagsFinal -version > flags.txt

如果要查看一个运行中的JVN相关参数的信息,可以使用jinfo,不过要先知道Java进程的ID。比如启动一个tomcat,它的PID为200,如下图所示

image-20221006153156718

通过 jinfo -flags PID 查看更多

image-20221006153752210

设备参数的常见方式

  • 开发工具中设置比如IDEA,Eclipse
  • 运行jar包的时候设置,例如 java -XX:+UseG1GC xxx.jar
  • web容器比如tomcat,可以在脚本中进行设置
  • 通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)

其他参数

  • Xms1000等价于 -XX:InitialHeapSize=1000
  • Xmx1000等价于 -XX:MaxHeapSize=1000
  • Xss1000等价于 -XX:ThreadStackSize=100

其实这块也相当于是-XX类型的参数

说明

一般要设置参数,可以先查看一下当前参数是什么,值得注意的是“=”表示默认值,“:=表示被用户或JVM修改后的值”。

常用参数的意义

参数含义说明
-XX:CICompilerCount=3最大并行编译数如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,
会增加JVM崩溃的可能
-XX:InitialHeapSize=100M初始化堆大小简写为-Xms100M
-XX:MaxHeapSize=100M最大堆大小简写为-Xmx100M
-XX:NewSize=20M新生代大小
-XX:MaxNewSize=50M最带新生代大小
-XX:OldSize=50M老年代大小
-XX:MetaspaceSize=50M方法区大小
-XX:MaxMetaspaceSize=50M最大方法区大小
-XX:+UseParalleGC使用ParalleGC新生代,吞吐量优先
-XX:+UseParalleOldGC使用ParalleOldGC老年代,吞吐量邮箱
-XX:+UseConcMarkSweepGC使用CMS老年代,停顿时间优先
-XX:-UseG1GC使用G1GC新生代,老年代,停顿时间优先
-XX:NewRatio新老生代的比值比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5
-XX::SurvivorRatio两个S区和Eden区的比值比如-XX:SurvivorRatio=8,也就是(S0+S1): Eden=2:8,也就是一个S占整个新生代的 1/10
-XX:+HeapDumpOnOutOnMemeryError启动堆内存溢出打印当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件
-XX:HeapDumpPath=heap.hprof制定堆内存溢出打印目录表示在当前目录生成一个heap。hprof文件
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps Xloggc:$CATALINA_HOME/logs/gc.log
打印出GC日志可以使用不同的垃圾收集器,对比查看GC情况
-Xss128k设置每个线程的栈堆大小经验值是3000-5000最佳
-XX::MaxTenuringThreshold=6老年代的最大临界值默认值为15
-XX:InitiatingHeapOccupancyPercent启动并发GC周期时堆内存使用占比G1之内的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比,值为0则表示“一直执行GC循环”,默认值为45
-XX:G1HeapWastePercent允许浪费堆空间的占比默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC。
-XX:MaxGCPauseMillis=200msG1最大停顿时间暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化为Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。
-XX:ConcGCThreads=n并发垃圾收集器使用的线程数量默认值随JVM运行平台的不同而不同
-XX:G1MixedGCLiveThresholdPercent混合垃圾回收周期中要包括的旧区域设置占用率阈值默认占用率为65%
-XX:G1MixedGCCountTarget设置标记周期完成后,对存活数据上限为G1MixedGCLiveThresholdPercent的旧区域执行混合垃圾回收的目标次数默认8次混合垃圾回收,混合回收的目标是要控制在此目标次数以内
-XX:G1OldCSetRegionThresholdPercent指定每轮Mixed GC回收的Region最大比例默认情况下,G1只把10%的Old Region加入到CSet中

常用命令

命令详细介绍可在官网中查询 search

jps

查看java进程

image-20221009233946661

image-20221009233352492

jinfo

实时查看和调整JVM配置参数

image-20221009234057994

查看用法

jinfo -flag name PID 查看某个java进程的name属性值

比如:

jinfo -flag MaxHeapSize PID 查看最大堆内存大小

jinfo -flag Use G1GC PID 查看是否使用G1GC

image-20221009234452943

调整用法

参数只有被标记为Manageable的flags可以被实时修改

jinfo -flag [+|-] PID

jinfo -flag <name>=<value> PID

查看曾经赋过值的一些参数

jinfo -flags PID

image-20221009234944520

jstat

查看虚拟机性能统计信息

image-20221009235129000

查看类装载信息

jstat -class PID 1000 10 查看某个Java进程的类装载信息,每1000毫秒输出一次,供输出10次

image-20221010002021364

查看垃圾收集信息

jstat -gc PID 1000 10 查看某个Java进程的垃圾收集信息,每1000毫秒输出一次,供输出10次

image-20221010002031832

jstack

查看线程堆栈信息

image-20221013001237565

用法

jstack PID

image-20221013002047742

jmap

生成堆转储快照

image-20221013002135724

打印出堆内存相关信息

jmap -heap PID

image-20221013002528993

dump出堆内存相关信息

jmap -dump:format=b,file=xxx.hprof PID

image-20221013002849039

dump下来的文件直接看有些费力,可以结合MAT工具分析。一般在开发中,JVM参数可以通过添加参数,这样内存溢出时,会自动dump该文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

常用工具

jconsole

JConsole工具是JDK自带的可视化监控工具,查看Java应用程序的运行情况,监控堆信息,永久区使用情况,类加载情况等

jvisualvm

  1. 可以监控本地的java进程的cpu,类,线程等

  2. 也可以监控远端java进程,比如监控远端tomcat

    如果是连接远端tomcat[也可以是任意Java进程],比如部署在阿里云服务器上的tomcat,可以按照以下步骤
    (1)在visualvm中选中“远程”,右击“添加”
    (2)主机名上写服务器的ip地址,比如39.100.39.63
    (3)右击该主机,添加“JMX”,也就是通过JMX技术具体监控远端服务器哪个Java进程
    (4)要想让服务器上的tomcat被连接,需要改一下Catalina.sh这个文件

    注意端口不要和服务器上的有冲突

    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -
    Djava.rmi.server.hostname=39.100.39.63 -Dcom.sun.management.jmxremote.port=8998 -
    Dcom.sun.management.jmxremote.ssl=false -
    Dcom.sun.management.jmxremote.authenticate=true -
    Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access -
    Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password"
    

    (5)在…/conf文件中添加两个文件jmxremote.access和jmxremote.password

    jmxremote.access

    guest readonly
    manager readwrite
    

    jmxremote.password

    guest guest
    manager manager
    

    授予权限 :chomd 600 *jmxremot*

    (6)将连接服务器地址改为公网ip地址

    (7)查看端口监听情况

    lsof -i:port #得到PID
    netstat -antup | grep PID
    

    (8)设置上述端口的防火墙策略和安全组策略

    (9)启动远端java进程,

    (10)在jmx 中输入端口,输入用户名和密码即可登录成功

内存分析工具 MAT

GC日志分析工具

要想分析日志的信息,首先得拿到GC日志文件,可以通过配置启动参数获取GC日志文件

XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:$CATALINA_HOME/logs/gc.log

  1. 在线查看工具 http://gceasy.io
  2. GCViewer

(9)启动远端java进程,

(10)在jmx 中输入端口,输入用户名和密码即可登录成功

内存分析工具 MAT

GC日志分析工具

要想分析日志的信息,首先得拿到GC日志文件,可以通过配置启动参数获取GC日志文件

XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:$CATALINA_HOME/logs/gc.log

  1. 在线查看工具 http://gceasy.io
  2. GCViewer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淦,服务器被人传了后门木马。。。

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 今天很暴躁&#xff0c;因为睡眠被打扰了。 一个朋友大半夜打我电话&#xff0c;说她云服…

ThingsBoard 接入摄像头方案

0、上图 废话不多说,先给大家来个效果图: 1、概述 最近,我在群里看到有很多兄弟向我咨询摄像头接入到tb的方案,这个就是找对人了,后续我会截图我当初做的东西,其实这个很简单,而且我这种方法是最好的,下面给大家一一道来。 我总结了下面几种情况,其实关键在于摄像头…

QML画布元素

在早些时候的Qt4中加入QML时&#xff0c;一些开发者讨论如何在QtQuick中绘制一个圆形。类似圆形的问题&#xff0c;一些开发者也对于其它的形状的支持进行了讨论。在QtQuick中没有圆形&#xff0c;只有矩形。在Qt4中&#xff0c;如果你需要一个除了矩形外的形状&#xff0c;你需…

浅谈电力物联网在智能配电系统应用

摘要&#xff1a; 在社会经济和科学技术不断发展中&#xff0c;配电网实现了角色转变&#xff0c;传统的单向供电服务形式已经被双向能流服务形式取代&#xff0c;社会多样化的用电需求也得以有效满足。随着物联网技术的发展&#xff0c;泛在电力物联网开始应用于当今的电力系…

使用【SD-WEBUI】插件生成单张图包含多个人物:分区域的提示词

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;潜变量成对&#xff08;Latent Couple&#xff09;&#xff08;1.1&#xff09;可自组LoRA&#xff08;Composable LoRA&#xff09; &#xff08;二&#xff09;分区扩散&#xff08;Multi Diffusion&#…

@Configuration(proxyBeanMethods = false) 解析

又是美好的一天呀~ 个人博客地址&#xff1a; huanghong.top 往下看看~ Configuration(proxyBeanMethods false) 解析proxyBeanMethods分析总结 Configuration(proxyBeanMethods false) 解析 最近看一些源码的时候&#xff0c;发现很多Configuration配置类上Configuration(p…

Mysql 学习(九)多表连接原理

连接介绍 为了更加方便的介绍一下连接&#xff0c;我们先创建两个表格 t1 和 t2 CREATE TABLE t1 (m1 int, n1 char(1));CREATE TABLE t2 (m2 int, n2 char(1));INSERT INTO t1 VALUES(1, a), (2, b), (3, c);INSERT INTO t2 VALUES(2, b), (3, c), (4, d);连接的本质是将各个…

GitHub上的AutoGPT神秘的面纱

最近一直在说AutoGPT&#xff0c;有很多的视频介绍&#xff0c;但是本着收藏等于学会的原则&#xff0c;收藏一堆一直没看。 这里用一句话说明白&#xff1a;AutoGPT就是一个用Python套装的壳子&#xff0c;用来更省事的调用OpenAI的API。&#xff08;如果你不明白API&#xf…

WiFi(Wireless Fidelity)基础(二)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

ByteBuffer的讲解和使用

1.它其实就是一个数据读取或者写入的一个缓冲区 2.基本的操作步骤&#xff1a; 向buffer写入数据&#xff0c;例如调用channel.read(buffer)调用flip()切换至读模式从buffer读取数据&#xff0c;例如调用buffer.get()调用clear()或者compact()切换至写模式重复以上步骤 3.内部…

企业商务租车为工作提供便利

在当代的忙碌生活中&#xff0c;我们总会遇到各种各样的烦恼。最突出的是企业在商务工作中&#xff0c;常常会因为各种原因而导致耽误时间&#xff0c;如火急火燎的去谈生意&#xff0c;却遇到了堵车的现象&#xff0c;或者车辆出现问题而导致耽误时间&#xff0c;而广州商务租…

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来&#xff0c;由于市场对车辆先进安全功能的需求的增加&#xff0c;汽车超声波传感器市场一直保持稳步增长。ICV估计&#xff0c;车载超声波传感器全球市场预计在2022年至2027年之间以11.5&#xff05;的复合年增长率增长&#xff0c;这种增长是由越来越多的高级驾驶辅助系…

python 开发 1 之 拷贝文件

目录 一、需求&#xff1a; 二、python拷贝分析 1、需要的库&#xff0c;及源路径、目标路径定义 2、定义的拷贝数组 3、自定义拷贝函数 1&#xff09; 如果目标路径不存在时&#xff0c;先创建目标路径 2&#xff09;遍历元组数组中的文件 3&#xff09;如果源文件或目…

【JavaEE初阶】多线程进阶(六)JUC 线程安全的集合类

文章目录 JUC&#xff08;java.util.concurrent&#xff09;的常见类Callable接口相关面试题 ReentrantLock(可重入锁)原子类信号量SemaphoreCountDownLatch 线程安全的集合类多线程环境使用 ArrayList多线程使用队列多线程使用哈希表&#xff08;重点&#xff09;相关面试题 J…

2.sql server数据表的管理(实验报告)

目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑运行结果 一﹑实验目的 掌握使用SQL Server管理平台和Transact-SQL语句Create table和Alter table创建和修改表的方法&#xff1b;掌握在SQL Server管理平台中对表进行插入、修改和删除数据操作…

哪种蓝牙耳机戴着最舒服?久戴不痛的蓝牙耳机推荐

很多喜欢跑步或通勤的时候带着耳机听音乐&#xff0c;而现在无线耳机市场规模扩大之后&#xff0c;也开始走向更加细分的市场&#xff0c;以满足越来越不同的差异化需求&#xff0c;但是佩戴的舒适度是很多人关注的&#xff0c;下面整理了几款佩戴舒适度高的蓝牙耳机&#xff0…

国考省考结构化面试:组织管理题,调研题,宣传题,活动题,整治题

国考省考结构化面试&#xff1a;组织管理题&#xff0c;调研题&#xff0c;宣传题&#xff0c;活动题&#xff0c;整治题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测…

基于python语言dlib库和opencv库的视频眨眼检测

功能说明&#xff1a; 基于python编程语言&#xff0c;使用dlib 和opencv开发的视频眨眼检测。 环境&#xff1a; * python 3.6.8 * opencv 3.4.2.16 * dlib 19.7.0 原理&#xff1a; 1.使用opencv-python读取处理视频图像 2.使用线程机制处理人脸检测关键点 3.根…

Midjourney 5.1震撼更新!逼真到给跪,中国情侣细节惊艳,3D视频大片马上来

来源 | 新智元 作者 | 桃子&#xff0c;拉燕 一个月前&#xff0c;Midjourney V5画的一对中国完美情侣在网上爆火&#xff0c;让许多人纷纷惊呼画师要失业了。 恰在今天&#xff0c;Midjourney官宣V5能免费用了&#xff0c;而且还是最新版本V5.1。 各个大模型的研究测试传送门 …

Android 13 变更及适配攻略

准备工作 首先将我们项目中的 targetSdkVersion和compileSdkVersion 升至 33。 影响Android 13上所有应用 1.通知受限 对新安装的应用的影响&#xff1a; 如果用户在搭载 Android 13 或更高版本的设备上安装您的应用&#xff0c;应用的通知默认处于关闭状态。在您请求新的…