1. jps - 列出正在运行的Java进程。可以使用jps -l选项列出进程启动类、路径等详情。
jps命令是Java虚拟机自带的一个工具,用于列出当前系统中所有正在运行的Java进程的进程ID。它通常与jmap、jstack等工具结合使用,用于诊断Java应用程序的性能问题。
jps命令的常用参数如下:
-
-l:输出完整的Java启动命令,包括传递给main函数的参数。
-
-m:输出虚拟机进程加载的主类名称和参数。
-
-v:输出虚拟机进程启动时的JVM参数。
-
-q:仅输出Java进程的进程ID。
-
-J:传递参数给jps命令使用的JVM。
使用jps命令时,不需要指定Java进程的进程名或路径。常见的使用方法如下:
-
使用jps命令列出所有正在运行的Java进程的进程ID,只需在命令行中输入jps即可。
-
如果想输出完整的Java启动命令和传递给main函数的参数,可以使用以下命令:
jps -l
- 如果想输出虚拟机进程启动时的JVM参数,可以使用以下命令:
jps -v
- 如果只想输出Java进程的进程ID,可以使用以下命令:
jps -q
- 如果需要传递参数给jps命令使用的JVM,可以使用以下命令:
jps -J-Xmx1024m
JVM参数-Xmx1024m表示设置Java堆内存的最大值为1024MB。
jps命令常用于诊断Java应用程序的性能问题。通过jps命令列出Java进程的进程ID,然后结合jmap、jstack等工具进行分析,可以有效地发现内存泄漏、死锁等问题。
2. jstat - 监视虚拟机统计信息。可以查看类装载、内存、垃圾收集等信息。如jstat -gc 2000 20 每2秒查询一次进程的垃圾收集信息,查询20次。
jstat命令是Java自带的一款监视 JDK 内部状态的工具,它可以对JVM内部的各种指标进行采样,并以一定的格式输出。下面是jstat命令的用法和各个参数的含义:
jstat [ generalOption | 输出格式Option | 自定义Option ] <vmid> [第一次间隔时间(ms)/数量] [间隔时间(ms)/数量]
其中,vmid
可以是Java进程ID或者进程名,其他参数如下:
generalOption:
选项 | 描述 |
---|---|
-class | 输出类加载情况(Class Loader) |
-compiler | 输出JIT编译器编译情况 |
-gc | 输出堆内存使用情况及GC情况 |
-gccapacity | 输出堆内存容量情况 |
-gccause | 输出上次垃圾收集的原因 |
-gcnew | 输出新生代内存使用情况和GC情况 |
-gcnewcapacity | 输出新生代内存容量情况 |
-gcold | 输出老年代内存使用情况和GC情况 |
-gcoldcapacity | 输出老年代内存容量情况 |
-gcpermcapacity | 输出永久代内存容量情况 |
-gcutil | 输出堆内存使用情况(%)和GC情况,是gc、gcnew、gcold、gccapacity、phases 的组合 |
输出格式Option:
选项 | 描述 |
---|---|
-t | 输出时间戳信息 |
-J<flag> | 将传递给运行时系统 |
-h | 显示帮助信息 |
-options | 输出JVM启动参数 |
-version | 输出JVM版本 |
-uptime | 输出JVM启动时间 |
-hjhisto[:live] | 输出 Java 堆中对象的直方图。 |
自定义Option:
除了常见的 generalOption 和输出格式Option,还可以定义自己的Option,一般会包括:
选项 | 描述 |
---|---|
-wait | 为了防止新进程的启动,会一直等 |
-debug | 输出调试信息 |
间隔时间/数量:
每个jstat选项都可以附加两个间隔参数:第一次间隔时间/数量和间隔时间/数量。第一次间隔时间是jstat命令开始执行时 CPU 收集的数据的时间,数据源自 GC
、Compiler
和 Class Loader
。第二个间隔时间是每隔多长时间收集一次样本。可以使用一些参数来控制采样的数量,如 "10"、"1 10"、"3 3" 等。
如果要查看某个 Java 进程的堆内存使用情况,可以使用以下命令:
jstat -gc <vmid> [间隔毫秒数] [采样数]
其中,-gc
表示要查看堆内存使用情况和GC情况,<vmid>
是Java进程ID或进程名,[间隔毫秒数]
指定采样的时间间隔,[采样数]
指定采样的次数。执行该命令可以输出类似以下格式的结果:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 0.0 0.0 16384.0 5039.4 65536.0 23435.0 8448.0 7371.0 1024.0 958.3 1266 26.614 2 0.036 26.650
其中,
S0C
:第一个幸存区的大小(字节);S1C
:第二个幸存区的大小(字节);S0U
:第一个幸存区已使用的空间(字节);S1U
:第二个幸存区已使用的空间(字节);EC
:伊甸园区的大小(字节);EU
:伊甸园区已使用的空间(字节);OC
:老年代的大小(字节);OU
:老年代已使用的空间(字节);MC
:元数据区大小(字节);MU
:元数据区已使用的空间(字节);CCSC
:压缩类空间大小(字节);CCSU
:已使用的压缩类空间大小(字节);YGC
:年轻代垃圾回收次数;YGCT
:年轻代垃圾回收消耗的时间(秒);FGC
:老年代垃圾回收次数;FGCT
:老年代垃圾回收消耗的时间(秒);GCT
:所有垃圾回收消耗的时间(秒)。
3. jmap - 生成堆转储快照。jmap -dump:live,format=b,file=heap.bin 可以生成进程的堆转储快照。
jmap是Java虚拟机自带的一种内存分析工具,用于生成并输出Java堆转储文件。这个文件包含了Java堆中所有对象的详细信息,如对象数量、对象大小、对象占用内存等。jmap可以帮助开发人员找到内存泄露和内存溢出等问题。
jmap命令的常用参数如下:
-
-dump:生成堆转储文件的参数,后跟文件的名称。
-
-heap:打印出Java堆的使用情况。
-
-histo:显示所有类占用堆空间的大小。
-
-permstat:打印出持久代内存使用情况。
-
-F:在不正常情况下强制执行堆转储操作。
-
-h:打印命令参数列表。
-
:指定Java进程的ID,如果未指定,则jmap将默认使用当前连接的Java进程。
使用jmap命令时,常见的步骤如下:
-
使用jps命令获取Java进程的ID。
-
运行jmap命令,并使用参数指定生成的堆转储文件的名称。
例如,生成堆转储文件时可以运行以下命令:
jmap -dump:format=b,file=heapdump.bin
查看Java堆使用情况时可以运行以下命令:
jmap -heap
查看所有类占用堆空间的大小时可以运行以下命令:
jmap -histo
查看持久代内存使用情况时可以运行以下命令:
jmap -permstat
使用jmap命令可以帮助开发人员快速定位内存问题,但是请注意,堆转储文件可能会非常大,因此请确保您有足够的磁盘空间来存储文件。
4. jhat - 分析堆转储快照。可以用于分析jmap生成的快照,如jhat heap.bin。
jhat 命令是 Java 虚拟机自带的一个工具,用于分析 Java 堆转储文件(heap dump)中的内容。它可读取由 jmap 命令生成的堆转储文件,并以 HTML 格式显示其中的信息。jhat 提供了一个 Web 应用程序,在运行 jhat 命令后,可通过浏览器访问该应用程序进行分析。下面是 jhat 命令的基本用法:
jhat <heap dump文件>
其中,<heap dump文件>
指的是通过 jmap 命令生成的堆转储文件。运行上述命令后,jhat 会启动一个内嵌的 Web 服务器,然后在控制台上输出一个 URL,用户可以通过浏览器访问该 URL,来查看堆转储文件中的信息。jhat 命令还支持一些可选参数,用于指定堆转储文件的格式、分析的深度、显示信息的方式等。下面是 jhat 命令的一些常用参数及其含义:
-J<option>
:指定与 JVM 相关的参数。例如,可以使用-J-Xms<size>
和-J-Xmx<size>
参数来指定 jhat 命令使用的 JVM 内存大小。-port <port>
:指定 Web 服务器监听的端口号,默认为 7000。-baseline <heap dump文件>
:指定一个基准堆转储文件,用于与当前分析的文件做比较,这样可以查看两个文件间的内存变化情况。-exclude <exclude_file>
:指定一个配置文件,用于排除某些类或对象在分析结果中的显示。-debug <level>
:指定调试级别,级别越高输出的日志信息越详细。
总之,jhat 命令是一个非常有用的工具,可方便开发者分析 Java 应用程序中的内存使用情况,发现内存泄露等问题。在了解 jhat 命令的基本用法和参数含义后,用户可以根据实际需要灵活使用。
5. jstack - 生成虚拟机当前时刻的线程堆栈跟踪快照。可以用来监控线程运行状态、死锁检测等。如 jstack 。
jstack 命令是 Java 虚拟机自带的一个工具,用于显示 Java 线程的堆栈信息。它可以打印出正在运行的 Java 程序的线程状态和堆栈信息,通常用于排查线程相关的问题。下面是 jstack 命令的基本用法:
jstack [ <option> ] <pid>
其中,<option>
是可选参数,<pid>
表示 Java 进程的进程 ID。如果没有指定任何选项,则 jstack 命令将打印 Java 进程中所有线程的完整堆栈信息。如果指定了选项,则 jstack 可以产生不同格式的输出,以便进行进一步分析。下面是一些常用的 jstack 命令选项及其含义:
-l
:输出深度为1的锁的拥有关系-m
:在输出前打印Java堆和内存信息-F
:当目标进程不响应时,强制输出线程堆栈-h
:在命令行中显示帮助信息
总之,jstack 命令是诊断 Java 应用程序中线程问题的重要工具。使用 jstack 命令可以快速查看 Java 程序中正在运行的线程,以及它们堆栈上的行为,定位代码中存在的问题。在实际使用 jstack 命令时,需要结合具体应用场景和需求来选择不同的选项进行分析。
6. jinfo - 显示虚拟机配置信息。可以动态修改虚拟机的可动态调优参数,如jinfo -flag PrintGC 来开启进程的gc日志打印。
jinfo 命令是一个用于显示和修改 JVM 运行时参数的命令行工具。该命令用于实时查看和修改 Java 应用程序的系统配置和 JVM 参数,有利于我们在应用运行过程中对系统性能进行调整和优化。
以下是 jinfo 命令的常见用法和参数含义:
-
查看 Java 应用程序正在使用的所有 JVM 参数 命令格式:jinfo [options] pid 参数含义:options 是指 jinfo 命令支持的所有可选参数;pid 是指正在运行 Java 应用程序的进程 ID。
-
查看指定参数的值 命令格式:jinfo -flag flag-name pid 参数含义:flag-name 是指需要查看的具体参数名字,如 -XX:+UseG1GC;pid 是指正在运行 Java 应用程序的进程 ID。
-
修改指定参数的值 命令格式:jinfo -flag [+|-]flag-name pid 参数含义:flag-name 是指需要修改的具体参数名字,如 -XX:+UseG1GC;pid 是指正在运行 Java 应用程序的进程 ID;"+"表示开启该参数,"-"表示关闭该参数。
-
显示所有可用的 JVM 参数列表 命令格式:jinfo -flags pid 参数含义:pid 是指正在运行 Java 应用程序的进程 ID。
在使用 jinfo 命令时,我们需要特别注意以下几点:
-
需要有足够的权限访问运行中的 JVM 进程。
-
如果不指定参数名,则 jinfo 命令会显示所有可用的 JVM 参数。
-
如果 Java 应用程序使用的是非标准的 JVM 参数,则 jinfo 命令可能无法识别该参数。
-
如果修改的参数不支持动态修改,则可能需要重新启动 JVM 进程才能使修改生效。
7. jconsole - 可以图形化地监视虚拟机各种运行状态信息的可视化工具。
jconsole 命令是 Java 自带的一款图形化监控工具,它提供了丰富的监控和诊断功能,可以帮助开发人员和系统管理员了解 Java 应用程序的性能、内存使用情况、线程信息等,方便发现问题和优化性能。
以下是 jconsole 命令的常见用法和参数含义:
-
启动 jconsole 工具 命令格式:jconsole [connection] 参数含义:connection 是一个可选参数,用于指定需要连接的目标 JVM 进程,可用于远程监控。
-
监控 Java 应用程序的性能和内存使用情况 jconsole 工具提供了丰富的图表和工具来展示 Java 应用程序的性能和内存使用情况,包括 CPU 使用率、堆内存使用情况、线程数、GC 次数和时间等。
-
查看线程信息和堆栈信息 jconsole 工具可以展示每个线程的状态、名称、优先级和堆栈信息,方便发现死锁和线程阻塞等问题。
-
监测 Java 应用程序的 JMX 远程接口 jconsole 工具可以连接远程的 JMX 接口,查看 JMX MBeans 和属性的信息。这可以帮助我们监控目标 JVM 的运行情况、配置信息和动态属性等。
-
监测 Java 应用程序的垃圾回收情况 jconsole 工具提供了实时的垃圾回收情况图表,包括垃圾回收总时间、各个垃圾回收器的执行时间和频率等,可以方便地判断
8. jvisualvm - 是一个功能更加强大的可视化JDK工具,集成了jconsole、jstat、jmap等命令功能,可以完整监视本地或远程虚拟机的各项指标。
jvisualvm 命令是 Java 自带的一款基于图形界面的多功能监控和诊断工具,它可以用于分析 Java 应用程序的性能、内存使用情况、线程信息等,通过可视化界面展示信息和进行交互,方便用户使用和发现问题。
-
启动 jvisualvm 工具 命令格式:jvisualvm 参数含义:无需参数,使用默认选项启动 jvisualvm 工具。
-
监测 Java 应用程序性能和内存使用情况 jvisualvm 工具提供了丰富的图表展示 Java 应用程序的性能和内存使用情况,包括 CPU 和内存的实时使用率、线程数、内存分配和垃圾回收情况等。这些图表可以帮助我们更好地了解应用程序的运行情况。
-
查看线程信息和垃圾回收情况 jvisualvm 工具可以展示每个线程的状态、名称、优先级和堆栈信息,方便发现死锁和线程阻塞等问题。同时,它也提供了实时的垃圾回收情况图表,包括垃圾回收总时间、各个垃圾回收器的执行时间和频率等。
-
监测 Java 应用程序的 JMX 远程接口 jvisualvm 工具可以连接远程的 JMX 接口,查看 JMX MBeans 和属性的信息。这可以帮助我们监控目标 JVM 的运行情况、配置信息和动态属性等。
-
查看 Java 应用程序的线程 dump 和堆 dump jvisualvm 工具支持生成线程 dump 和堆 dump,这可以帮助我们发现应用程序的性能瓶颈和内存耗尽等问题。
-
应用程序和插件的扩展 jvisualvm 工具支持各种应用程序扩展和插件扩展,例如 Visual GC 插件、MBeans 插件、jmx-console 和 profiler 插件等。
总之,jvisualvm 工具是一个性能分析和监控的全能工具,可以帮助开发和运维人员发现问题并进行优化,提高应用程序的性能和可靠性。
9. jdb - java调试器,可以对Java程序进行调试,类似gdb调试器。
jdb 命令是 Java Debugging Tool 的缩写,是 Java 自带的调试工具之一。通过 jdb 命令,您可以在代码中设置断点、观察变量值、单步执行程序并检查其状态等。
下面是 jdb 命令的常用参数:
- -classpath:指定编译后的 class 文件所在路径,类似于 java 命令的 -cp 或 -classpath 参数。
- -sourcepath:指定源代码所在路径。
- -attach:以远程方式附加到已经启动的 Java 进程中,例如使用了 jvm 参数 -agentlib:jdwp。
- -listen:以远程方式等待在指定端口上的调试器连接。
- -source:指定类对应的源代码文件,需要与 -sourcepath 参数配合使用。
- -exclude:指定要排除的类,可以使用多个 -exclude 参数指定多个类。
- -Xdebug:以调试模式启动应用程序,等同于 jvm 参数 -Xdebug。
- -Xnoagent:禁用特殊的调试代理程序,等同于 jvm 参数 -Xnoagent。
- -help:查看帮助文档。
除了以上参数外,jdb 命令还支持一些调试相关的命令,例如:
- stop:停止程序的执行。
- run:开始执行程序。
- step:单步执行程序,并进入下一行代码。
- next:单步执行程序,不进入方法内部。
- cont:从当前位置继续执行程序。
- print:打印指定变量的值。
- watch:观察某个变量的值是否发生变化。
- break:设置断点。
- clear:清除断点。
在使用 jdb 命令的过程中,您需要在命令行中以类似于 gdb 的方式输入命令,需要比较熟悉命令行调试的相关概念和操作。同时,jdb 命令也可以与一些集成开发环境(例如 IntelliJ IDEA)配合使用,以更方便地进行调试。