技术之道

长风破浪会有时,直挂云帆济沧海

  • 首页
  • 分类
  • 归档
  • 标签

  • 搜索
服务治理 k8s tabnine cursor github copilot ai chatgpt chatgpt ai sop 技术选型 bigdata 工具 多进程多线程 docker 计算机网络 mysql 事务 基础架构 kafka nio 分布式 服务搭建 监控 jvm 管理/成长 jenkins devops 云原生 nginx 架构 故障处理 hive spark mapreduce apm redis memcached java 性能 linux

JVM命令大全

发表于 2022-08-24 | 分类于 工具 | 0 | 阅读次数 381

JVM命令大全

jps

Java版的ps命令,查看java进程及其相关的信息,如果你想找到一个java进程的pid,那可以用jps命令替代linux中的ps命令了,简单而方便。

命令格式:

jps [options] [hostid]

options参数解释:

  • -l : 输出主类全名或jar路径
  • -q : 只输出LVMID
  • -m : 输出JVM启动时传递给main()的参数
  • -v : 输出JVM启动时显示指定的JVM参数

最常见示例:

jps -l `输出jar包路径,类全名`
jps -m `输出main参数`
jps -v `输出JVM参数`

便捷查询java进程路径

# 查看java进程(PID)
[root@hd208 console-api]# jps -l |grep dataapi
15766 ./bdata-dataapi-server-1.0.0.jar

# 查到PID后,通过pwdx ${PID}查看路径
[root@hd208 console-api]# pwdx 15766
15766: /opt/bdata/app/bdata-api/data-service

jinfo

jinfo是用来查看JVM参数和动态修改部分JVM参数的命令

命令格式:

jinfo [option] <pid>

options参数解释:

  • -flag 打印指定名称的参数
  • -flag [+|-] 打开或关闭参数
  • -flag = 设置参数
  • -flags 打印所有参数
  • -sysprops 打印系统配置
  • 打印上面两个选项

最常用示例:

其中1为pid

查看JVM参数和系统配置

jinfo 11666``jinfo -flags 11666``jinfo -sysprops 1

查看打印GC日志参数

jinfo -flag PrintGC 11666``jinfo -flag PrintGCDetails 1

打开GC日志参数

jinfo -flag +PrintGC 11666``jinfo -flag +PrintGCDetails 1

关闭GC日志参数

jinfo -flag -PrintGC 11666``jinfo -flag -PrintGCDetails 1

还可以使用下面的命令查看那些参数可以使用jinfo命令来管理:

java -XX:+PrintFlagsFinal -version | `grep` manageable

jstat

jstat命令是使用频率比较高的命令,主要用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等。

命令格式:

jstat [option] LVMID [interval] [count]

其中LVMID是进程id,interval是打印间隔时间(毫秒),count是打印次数(默认一直打印)

option参数解释:

  • -class class loader的行为统计
  • -compiler HotSpt JIT编译器行为统计
  • -gc 垃圾回收堆的行为统计
  • -gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
  • -gcutil 垃圾回收统计概述
  • -gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
  • -gcnew 新生代行为统计
  • -gcnewcapacity 新生代与其相应的内存空间的统计
  • -gcold 年老代和永生代行为统计
  • -gcoldcapacity 年老代行为统计
  • -gcpermcapacity 永生代行为统计
  • -printcompilation HotSpot编译方法统计

jstack

jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。

命令格式:

jstack [-l] <pid> (连接运行中的进程)
jstack -F [-m] [-l] <pid> (连接挂起的进程)
jstack [-m] [-l] <executable> <core> (连接core文件)
jstack [-m] [-l] [server_id@]<remote server IP or hostname> (连接远程debug服务器)

option参数解释:

  • -F 当使用jstack 无响应时,强制输出线程堆栈。
  • -m 同时输出java和本地堆栈(混合模式)
  • -l 额外显示锁信息

常用示例:

jstack -l 1 | more

jmap

jmap是用来生成堆dump文件和查看堆相关的各类信息的命令,例如查看finalize执行队列,heap的详细信息和使用情况。

命令格式:

**jmap [option] <pid> (连接正在执行的进程)**a
jmap [option] <executable <core> (连接一个core文件)
jmap [option] [server_id@]<remote server IP or hostname> (链接远程服务器)

option参数解释:

  • to print same info as Solaris pmap
  • -heap 打印java heap摘要
  • -histo[:live] 打印堆中的java对象统计信息
  • -clstats 打印类加载器统计信息
  • -finalizerinfo 打印在f-queue中等待执行finalizer方法的对象
  • -dump: 生成java堆的dump文件

dump-options:

live 只转储存活的对象,如果没有指定则转储所有对象

format=b 二进制格式

file= 转储文件到

  • -F 强制选项

常用示例:

jmap -dump:live,format=b,file=dump.hprof 1

jhat

jhat是用来分析jmap生成dump文件的命令,jhat内置了应用服务器,可以通过网页查看dump文件分析结果,jhat一般是用在离线分析上。

命令格式:

jhat [option] [dumpfile]

option参数解释:

  • -stack false: 关闭对象分配调用堆栈的跟踪
  • -refs false: 关闭对象引用的跟踪
  • -port : HTTP服务器端口,默认是7000
  • -debug : debug级别

0: 无debug输出

1: Debug hprof file parsing

2: Debug hprof file parsing, no server

  • -version 分析报告版本

常用示例:

jhat dump.hprof

jar

JAR 文件以 ZIP 文件格式打包,因此您可以将它们用于无损数据压缩,归档,解压缩和归档解压缩等任务。常见jar操作如下:

Operation Command
创建 jar jar cf jar-file input-file(s)
查看 jar 文件内容 jar tf jar-file
提取/解压 jar 文件内容 jar xf jar-file
提取指定文件 jar xf jar-file archived-file(s)
运行 jar(需要 Main-class 清单头文件) java -jar app.jar

jar参数释意:

image-20220909114053413

创建jar

创建 JAR 文件的基本格式是:

jar cf jar-file input-file(s)

参数解释:

  • c : 表示要创建一个 jar 文件
  • f : 表示要输出到一个文件中
  • jar-file : 生成 jar 文件的具体名称。惯例是 xxx.jar,后缀名称不是强制的
  • input-file(s) : 可以输入一个或多个文件,包含 * 通配符,如果是一个目录则递归添加到 jar 归档中

c 和 f 选项可以按任意顺序出现,但是它们之间不应该有任何空格。

这个命令将生成一个压缩 JAR 文件并将其放入当前目录中。该命令还将为 JAR 存档生成一个默认的清单文件。

注意: JAR 文件中的元数据,例如条目名称、注释和清单的内容,必须是 UTF8 编码。

您可以将这些附加选项添加到基本命令的cf选项中:

option 描述
v 输出每个被添加到 jar 中的文件详细路径
0 不压缩 jar 文件
M 不生成默认的清单文件
m 使用现有清单文件,命令格式 jar cmf jar-file existing-manifest input-file(s); 清单文件必须以 newLine 或则回车结束,否则不会正确解析
-c 在执行命令期间更改目录。后面有例子解说

TIP

当你创建一个 JAR 文件时,创建的时间存储在 JAR 文件中。因此,即使 JAR 文件的内容没有改变, 当您多次创建 JAR 文件时,产生的文件也不是完全相同的。当您在构建环境中使用 JAR 文件时,您应该意识到这一点。 建议您在清单文件中使用版本化信息,而不是创建时间,来控制 JAR 文件的版本。请参阅设置包版本信息部分。

查看jar

查看 JAR 文件内容的命令的基本格式是:

jar tf jar-file

参数说明:

  • t : 表示要查看 jar 文件的内容
  • f : 表示从一个文件查看
  • jar-file : 具体的文件路径
  • v : 显示文件的大小和上次修改日期信息

同样,tf 没有固定顺序,但是中间不能有空格.

TIP 一个例子

$ jar tf TicTacToe.jar
META-INF/
META-INF/MANIFEST.MF
TicTacToe$1.class
TicTacToe.class
TicTacToe.java
audio/
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au
example1.html
images/
images/cross.gif
images/not.gif

加 v 输出详细信息

$ jar tvf TicTacToe.jar
  0 Fri May 11 15:19:34 GMT+08:00 2018 META-INF/
 68 Fri May 11 15:19:34 GMT+08:00 2018 META-INF/MANIFEST.MF
550 Thu Mar 29 07:39:22 GMT+08:00 2018 TicTacToe$1.class
3705 Thu Mar 29 07:39:22 GMT+08:00 2018 TicTacToe.class
9584 Thu Mar 29 07:39:22 GMT+08:00 2018 TicTacToe.java
  0 Fri May 11 15:09:34 GMT+08:00 2018 audio/
4032 Thu Mar 29 07:39:22 GMT+08:00 2018 audio/beep.au
2566 Thu Mar 29 07:39:22 GMT+08:00 2018 audio/ding.au
6558 Thu Mar 29 07:39:22 GMT+08:00 2018 audio/return.au
7834 Thu Mar 29 07:39:22 GMT+08:00 2018 audio/yahoo1.au
7463 Thu Mar 29 07:39:22 GMT+08:00 2018 audio/yahoo2.au
424 Thu Mar 29 07:39:22 GMT+08:00 2018 example1.html
  0 Fri May 11 15:09:34 GMT+08:00 2018 images/
157 Thu Mar 29 07:39:22 GMT+08:00 2018 images/cross.gif
158 Thu Mar 29 07:39:22 GMT+08:00 2018 images/not.gif

提取/解压 Jar

用于提取 JAR 文件内容的基本命令是:

jar xf jar-file [archived-file(s)]

命令和参数:

  • x : 表示要提取;extract 的缩写
  • f : 从文件
  • jar-file : 具体的文件
  • archived-file(s) : 可选参数,要提取的指定文件由空格隔开,不指定则提取所有的文件

解压到当前文件路径,需要小心,如果当前文件有同名文件则会被覆盖;

更新Jar文件

Jar 工具提供了一个 u 选项,您可以通过修改它的清单或添加文件来更新现有 Jar 文件的内容。

jar uf jar-file input-file(s)

命令和参数:

  • u : 表示更新现有的 jar
  • f : 通过文件指定
  • jar-file : 文件路径
  • input-file(s) : 空格分割的多个文件或单个文件

把指定的文件添加到现有的 jar 文件红,jar 中已有文件将被覆盖;也可以指定新添加的文件添加到 jar 中的哪个目录下

JVM参数

标准参数

标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
通过命令 java即可查看

用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM
                  默认 VM 是 server,
                  因为您是在服务器类计算机上运行。


    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 : 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时, 将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕

非标准参数(-X)

非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
通过命令 java -X,如下

java -X
    -Xmixed           混合模式执行(默认)
    -Xint             仅解释模式执行
    -Xbootclasspath:<用 : 分隔的目录和 zip/jar 文件>
                      设置引导类和资源的搜索路径
    -Xbootclasspath/a:<用 : 分隔的目录和 zip/jar 文件>
                      附加在引导类路径末尾
    -Xbootclasspath/p:<用 : 分隔的目录和 zip/jar 文件>
                      置于引导类路径之前
    -Xdiag            显示附加诊断消息
    -Xnoclassgc        禁用类垃圾收集
    -Xincgc           启用增量垃圾收集
    -Xloggc:<file>    将 GC 状态记录在文件中(带时间戳)
    -Xbatch           禁用后台编译
    -Xms<size>        设置初始 Java 堆大小
    -Xmx<size>        设置最大 Java 堆大小
    -Xss<size>        设置 Java 线程堆栈大小
    -Xprof            输出 cpu 分析数据
    -Xfuture          启用最严格的检查,预计会成为将来的默认值
    -Xrs              减少 Java/VM 对操作系统信号的使用(请参阅文档)
    -Xcheck:jni       对 JNI 函数执行其他检查
    -Xshare:off       不尝试使用共享类数据
    -Xshare:auto      在可能的情况下使用共享类数据(默认)
    -Xshare:on        要求使用共享类数据,否则将失败。
    -XshowSettings    显示所有设置并继续
    -XshowSettings:system
                      (仅限 Linux)显示系统或容器
                      配置并继续
    -XshowSettings:all
                      显示所有设置并继续
    -XshowSettings:vm 显示所有与 vm 相关的设置并继续
    -XshowSettings:properties
                      显示所有属性设置并继续
    -XshowSettings:locale
                      显示所有与区域设置相关的设置并继续

非Stable参数(-XX)

非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用(但是,这些参数往往是非常有用的). 通过命令java -XX:+PrintFlagsFinal

也可以通过-XX:+PrintCommandLineFlags 。这个参数的作用是显示出VM初始化完毕后所有跟最初的默认值不同的参数及它们的值。
这个参数至少在Sun JDK 5上已经开始支持,Oracle/Sun JDK 6以及Oracle JDK 7上也可以使用。

再下来,-XX:+PrintFlagsInitial 。这个参数显示在处理参数之前所有可设置的参数及它们的值,然后直接退出程序。

jvm参数说明

参数 说明
-XX:+PrintVMOptions jvm添加该参数,可以在程序运行时,打印虚拟机接受到的命令行显示参数(打印出我们显示指定的)
-XX:+PrintCommandLineFlags 可以打印出传递给虚拟机的显示和隐式参数,隐式参数未必是通过命令行直接给出的,它可能是由虚拟机启动时自行设置的
-XX:+PrintFlagsFinal 它会打印所有的系统参数的值,通常我们会用来查看jvm参数的默认值
-Xms 初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx 最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
# jvm # 工具
关键冲突笔记
统一监控平台
  • 文章目录
  • 站点概览
lw‘Blogs

lw‘Blogs

自信人生二百年,会当水击三千里

80 日志
8 分类
40 标签
RSS
Github E-mail
Creative Commons
© 2025 京ICP备2022025426号-1