在java的/bin目录下有许多java自带的工具。
 
 我们常用的有
基础工具
jar:创建和管理jar文件
 java:java运行工具,用于运行class文件或jar文件
 javac:java的编译器
 javadoc:java的API文档生成工具
性能监控和故障处理
jps
 jstat
 jinfo
 jmap
 hstack
可视化故障处理工具
JConsole
 JHSDB
jps:用于显示当前运行的Java进程的PID
jps命令显示的Java进程ID(PID)就是操作系统中的进程ID(Process ID)。这是每个进程在操作系统中的唯一标识符。jps列出的PID与ps、top等操作系统工具列出的PID是一致的。
常用参数
-l:显示主类的全限定名或JAR文件的完整路径。
jps -l
 示例输出:
 12345 com.example.MyJavaApp
 67890 sun.tools.jps.Jps
-v:显示传递给Java虚拟机的参数。
jps -v
 示例输出:
 12345 MyJavaApp -Xmx1024m
 67890 Jps -Dapplication.home=/usr/lib/jvm/java-14
-m:显示传递给主类的参数。
jps -m
 示例输出:
 12345 MyJavaApp arg1 arg2
 67890 Jps
jstat:虚拟机的类加载信息,内存信息,垃圾回收,运行时编译的统计信息
查看类加载信息
jstat -class 12345
 输出示例:
  Loaded  Bytes  Unloaded  Bytes  Time(ms)1000  5000     50     200      300
查看垃圾回收信息:jstat -gc 12345
 S0C    S1C    S0U    S1U      EC       EU        OC       OU     MC       MU     CCSC     CCSU    YGC     YGCT    FGC    FGCT     GCT   
1024.0 1024.0  512.0   0.0   8192.0   4096.0   10240.0   8192.0  5120.0   2048.0  640.0    320.0      5    0.050     2    0.100    0.150
S0C (Survivor 0 Capacity):第一个幸存区的容量,单位是KB。
 S1C (Survivor 1 Capacity):第二个幸存区的容量,单位是KB。
 S0U (Survivor 0 Utilization):第一个幸存区的已使用空间,单位是KB。
 S1U (Survivor 1 Utilization):第二个幸存区的已使用空间,单位是KB。
 EC (Eden Capacity):Eden区的容量,单位是KB。
 EU (Eden Utilization):Eden区的已使用空间,单位是KB。
 OC (Old Capacity):老年代的容量,单位是KB。
 OU (Old Utilization):老年代的已使用空间,单位是KB。
 MC (Metaspace Capacity):元数据区的容量,单位是KB。
 MU (Metaspace Utilization):元数据区的已使用空间,单位是KB。
 CCSC (Compressed Class Space Capacity):压缩类空间的容量,单位是KB。
 CCSU (Compressed Class Space Utilization):压缩类空间的已使用空间,单位是KB。
 YGC (Young Generation GC Count):年轻代垃圾收集的次数。
 YGCT (Young Generation GC Time):年轻代垃圾收集的总时间,单位是秒。
 FGC (Full GC Count):完全垃圾收集的次数。
 FGCT (Full GC Time):完全垃圾收集的总时间,单位是秒。
 GCT (Total GC Time):垃圾收集的总时间(年轻代和完全垃圾收集的总和),单位是秒。
每1秒输出一次gc快照,输出5次:jstat -gcutil 30500 1000 5
jstat -gcutil命令的输出以百分比形式显示各个内存区域的利用率(即已使用内存占总内存的比例)
 
jvm的内存配置情况:jstat -gccapacity 30500
 NGCMN    NGCMX     NGC    S0C    S1C    EC      OGCMN    OGCMX    OGC       OC       MCMN     MCMX      MC512.0  10240.0   8192.0  1024.0  1024.0  6144.0  10240.0  20480.0  10240.0  10240.0  512.0  1024.0  512.0
NGCMN:新生代最小容量。
 NGCMX:新生代最大容量。
 NGC:当前新生代容量。
 S0C、S1C:第一个和第二个幸存区的容量。
 EC:Eden区的容量。
 OGCMN:老年代最小容量。
 OGCMX:老年代最大容量。
 OGC:当前老年代容量。
 OC:当前老年代容量(通常和OGC相同)。
 MCMN:元数据区最小容量。
 MCMX:元数据区最大容量。
 MC:当前元数据区容量。
jstat -gcold,-gcnew等
jinfo
jvm的常用参数
内存
jvm的最大使用内存,最小使用内存
 jvm的新生代的最大最小使用内存
 元空间的最大最小使用内存
 栈的最大最小内存
性能调优相关参数:
-XX:ParallelGCThreads: 设置并行垃圾收集器的线程数。
 -XX:ConcGCThreads: 设置并发垃圾收集器的线程数。
 -XX:SurvivorRatio: 设置新生代中Eden区与Survivor区的比例。
 -XX:MaxTenuringThreshold: 设置对象在新生代中经过多少次GC后进入老年代。
jinfo -flags:显示所有JVM标志及其值
VM Flags:
 -XX:CICompilerCount=12 //设置即时编译器(JIT)线程数为12,用于提升编译性能。
 -XX:ConcGCThreads=3 //分层编译最多只进行到级别1,通常意味着只进行简单的编译优化。
 -XX:+UseG1GC //启用 G1 垃圾收集器
 -XX:G1ConcRefinementThreads=13 //设置 G1 垃圾收集器的并发精炼线程数为13,用于处理记忆集的并发更新
 -XX:G1EagerReclaimRemSetThreshold=16 //设置 G1 垃圾收集器在回收记忆集时的早期阈值
 -XX:G1HeapRegionSize=2097152 //设置 G1 垃圾收集器堆区域的大小为2MB
 -XX:G1RemSetArrayOfCardsEntries=16
 -XX:G1RemSetHowlMaxNumBuckets=8
 -XX:G1RemSetHowlNumBuckets=8
 -XX:GCDrainStackTargetSize=64
 -XX:InitialHeapSize=266338304 //堆大小
 -XX:+ManagementServer
 -XX:MarkStackSize=4194304
 -XX:MaxHeapSize=4236247040
 -XX:MaxNewSize=2541748224
 -XX:MinHeapDeltaBytes=2097152
 -XX:MinHeapSize=8388608
 -XX:NonProfiledCodeHeapSize=0
 -XX:-ProfileInterpreter
 -XX:ProfiledCodeHeapSize=0
 -XX:SoftMaxHeapSize=4236247040
 -XX:TieredStopAtLevel=1
 -XX:+UseCompressedClassPointers
 -XX:+UseCompressedOops
 -XX:+UseFastUnorderedTimeStamps
 -XX:-UseLargePagesIndividualAllocation
jinfo -flag MaxHeapSize 30500:查看特定标志的值

jinfo -flag MaxHeapSize=2147483648 12345:修改特点的标志值
jmap:查看jvm内存使用情况
1. 生成堆转储(Heap Dump)
使用 jmap 可以生成 Java 进程的堆转储文件,以便后续分析和诊断内存问题。
jmap -dump:format=b,file=<dump_file_path> 
 -dump:format=b,file=<dump_file_path>: 指定生成堆转储文件的格式为二进制(b),并指定转储文件的路径。
 : Java 进程的进程号(PID)。
 例如,要生成一个名为 heapdump.bin 的堆转储文件,可以执行以下命令:
jmap -dump:format=b,file=heapdump.bin
2. 查看堆内存使用情况
可以使用 jmap 查看堆内存的使用情况和统计信息,包括堆的大小、使用量、空闲量等。
jmap -heap 
 例如:
jmap -heap
3. 查看堆中对象统计信息
jmap 可以输出堆中各个类的实例数量和占用内存等信息。
 jmap -histo 
 例如:
 jmap -histo 
4. 查看类加载器信息
可以使用 jmap 查看已加载类的详细信息和类加载器的关系。
 jmap -clstats 
 例如:
 jmap -clstats 
jstack:线程状态,定位线程死锁、查看线程状态、分析线程间的互相等待
查看所有线程
jstack 30500
检测死锁
jstack -l -F