常用的几个jvm命令解释

1. jstat 

    这个命令对于查看Jvm的堆栈信息很有用。能够查看eden,survivor,old,perm等heap的capacity,utility信息

 

    对于查看系统是不是有能存泄漏以及参数设置是否合理有不错的意义

 

2. jstack

 

    这个是用来查看jvm当前的thread dump的。可以看到当前Jvm里面的线程状况。

 

    这个对于查找blocked线程比较有意义

 

3. jmap .

 

    这个是用来查看jvm当前的heap dump的。可以看出当前jvm中各种对象的数量,所占空间等等。

 

    尤其值得一提的是这个命令可以到处一份binary heap dump的bin文件,这个文件能够直接用

 

    Eclipse Memory Anayliser来分析,并找出潜在的内存泄漏的地方。

 

4. 还有一个比较有用的非jvm命令--netstat

 

    通过这个命令可以看到linux系统当前在各个端口的链接状态,比如查看数据库连接数等等

 

jstat

 

 

       1. jstat -gc pid

 

            可以显示gc的信息,查看gc的次数,及时间。

 

            其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

 

      2.jstat -gccapacity pid

            可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,

 

            如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,

 

            PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。

 

            其他的可以根据这个类推, OC是old内纯的占用量。

 

     3.jstat -gcutil pid

 

            统计gc信息统计。

 

     4.jstat -gcnew pid

 

           年轻代对象的信息。

 

     5.jstat -gcnewcapacity pid

 

           年轻代对象的信息及其占用量。

 

     6.jstat -gcold pid

 

          old代对象的信息。

 

     7.stat -gcoldcapacity pid

 

          old代对象的信息及其占用量。

 

     8.jstat -gcpermcapacity pid

 

          perm对象的信息及其占用量。

 

     9.jstat -class pid

 

          显示加载class的数量,及所占空间等信息。

     10.jstat -compiler pid

 

          显示VM实时编译的数量等信息。

 

     11.stat -printcompilation pid

 

          当前VM执行的信息。

 

        一些术语的中文解释:

 

         S0C:年轻代中第一个survivor(幸存区)的容量 (字节)

         S1C:年轻代中第二个survivor(幸存区)的容量 (字节)

         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)

         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)

           EC:年轻代中Eden(伊甸园)的容量 (字节)

           EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)

           OC:Old代的容量 (字节)

           OU:Old代目前已使用空间 (字节)

           PC:Perm(持久代)的容量 (字节)

           PU:Perm(持久代)目前已使用空间 (字节)

         YGC:从应用程序启动到采样时年轻代中gc次数

       YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

         FGC:从应用程序启动到采样时old代(全gc)gc次数

       FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)

         GCT:从应用程序启动到采样时gc用的总时间(s)

 

    NGCMN:年轻代(young)中初始化(最小)的大小 (字节)

 

    NGCMX:年轻代(young)的最大容量 (字节)

 

        NGC:年轻代(young)中当前的容量 (字节)

 

   OGCMN:old代中初始化(最小)的大小 (字节)

 

   OGCMX:old代的最大容量 (字节)

 

       OGC:old代当前新生成的容量 (字节)

 

   PGCMN:perm代中初始化(最小)的大小 (字节)

 

   PGCMX:perm代的最大容量 (字节)  

 

       PGC:perm代当前新生成的容量 (字节)

 

          S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

 

         S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

 

           E:年轻代中Eden(伊甸园)已使用的占当前容量百分比

 

           O:old代已使用的占当前容量百分比

 

           P:perm代已使用的占当前容量百分比

 

  S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)

 

 S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)

 

    ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)

 

       DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)

 

          TT: 持有次数限制

 

       MTT : 最大持有次数限制

### JVM 命令行工具概述 JVM 提供了一系列命令行工具来帮助开发者诊断、调试和优化 Java 应用程序。以下是几个常用JVM 命令行工具及其使用方法: #### 1. **jstack** `jstack` 是一个用于生成 JVM 线程快照的工具,能够显示 JVM 中所有线程的状态以及调用栈信息[^1]。 - **基本语法**: ```bash jstack <pid> ``` 其中 `<pid>` 表示目标 Java 进程的 ID。 - **功能特点**: - 显示线程名称、ID 和状态(如 `RUNNABLE`, `BLOCKED`, `WAITING`)。 - 展示每个线程的调用栈信息。 - 可以识别死锁情况并提供相关提示。 #### 2. **jps** `jps` 是用来查找当前运行中的 Java 进程的工具[^4]。 - **基本语法**: ```bash jps [-mlvV] ``` - **常用选项**: - `-m`: 输出传递给主函数的参数。 - `-l`: 输出完整的包名或类名。 - `-v`: 列出传递给 JVM 的参数。 #### 3. **jstat** `jstat` 能够实时监控 JVM 的垃圾回收 (GC) 统计数据和其他性能指标[^5]。 - **基本语法**: ```bash jstat -<option> <pid> [<interval> [<count>]] ``` - **常见选项**: - `-gcutil`: 显示 GC 总体利用率摘要。 - `-gccapacity`: 显示各代内存容量的变化趋势。 - `-class`: 显示加载的类数量及字节码大小。 #### 4. **jinfo** `jinfo` 用于动态查询和修改正在运行的 Java 进程的配置参数。 - **基本语法**: ```bash jinfo [-flag name] <pid> ``` - **主要用途**: - 查询 JVM 启动时设置的参数。 - 动态调整某些 JVM 参数(需支持热更新的功能)。 #### 5. **jmap** `jmap` 主要用于生成堆转储文件或将堆内存的信息打印到控制台[^3]。 - **基本语法**: ```bash jmap -heap <pid> ``` - **其他功能**: - 使用 `-dump:live,format=b,file=<filename>` 创建堆转储文件以便后续分析。 #### 实际应用场景举例 假设我们希望对某个 Java 应用进行性能调优,可以按照以下方式操作: 1. 使用 `jps` 找到目标进程的 PID。 2. 使用 `jstack` 获取该进程中所有线程的详细信息。 3. 使用 `jstat` 定期收集 GC 数据以评估是否存在频繁 Full GC 或内存泄漏问题。 4. 如果怀疑存在内存溢出,则可以通过 `jmap` 导出堆转储文件,并借助 Eclipse Memory Analyzer 工具进一步深入分析。 ```python import os def run_jvm_tools(pid): commands = [ f'jps', f'jstack {pid}', f'jstat -gcutil {pid} 1000 5', # 每秒刷新一次,共采集五次 f'jmap -heap {pid}' ] for cmd in commands: result = os.popen(cmd).read() print(f"Command Output ({cmd}):") print(result) # 替换为实际的目标PID run_jvm_tools(12345) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值