jvm 命令相关

查看哪个线程占用最多资源:

找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid  命令查看这个进程下面的所有线程占用情况。

找出该进程  ps -ef | grep java

找出该进程内最耗费内存的线程 :top -H -p  pid

PS:ps -eLf 查看所有所有进程的所有线程    

监控java线程数:
ps -eLf | grep java | wc -l

jstack [-l] pid
jstack 8545 > stack.log
jstack [进程]|grep -A 10 [线程的16进制] 
即: jstack 21125|grep -A 10 52f1  
-A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。
 

jstack -m 会打印出JVM堆栈信息,涉及C、C++部分代码,可能需要配合gdb命令来分析。

 

频繁GC问题或内存溢出问题

一、使用jps查看线程ID

二、使用jstat -gc 3331 25 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

三、使用jstat -gccause:额外输出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件

五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。

六、结合代码解决内存溢出或泄露问题。

### 常用 JVM 命令列表 以下是常用的 JVM 命令及其功能说明: #### 1. jstat `jstat` 是用于监控 JVM 运行时状态的工具,可以显示类加载、内存使用、垃圾回收等信息。其基本语法为: ```bash jstat [option] LVMID [interval] [count] ``` 例如,查看某个进程的垃圾回收统计信息: ```bash jstat -gcutil <LVMID> 1000 5 ``` 这里 `<LVMID>` 是目标 JVM 的进程 ID[^1]。 #### 2. jinfo `jinfo` 用于查看和修改 JVM 的配置参数。可以通过以下命令查看或设置 JVM 参数: - 查看所有 JVM 标志: ```bash jinfo -flags <LVMID> ``` - 查看所有 Java 系统属性: ```bash jinfo -sysprops <LVMID> ``` - 修改最大堆内存大小(需要权限): ```bash jinfo -flag MaxHeapSize=2g <LVMID> ``` 请注意,并非所有 JVM 标志都可以在运行时动态修改[^2]。 #### 3. jmap `jmap` 用于生成 Java 堆的 Dump 文件,帮助分析内存使用情况。常用命令包括: - 生成堆 Dump 文件: ```bash jmap -dump:format=b,file=heapDump.hprof <LVMID> ``` - 查看堆内存分布: ```bash jmap -heap <LVMID> ``` 生成的 Dump 文件可以进一步通过 `jhat` 或其他工具进行分析[^3]。 #### 4. jhat `jhat` 用于解析 Java 堆 Dump 文件并启动一个 Web 服务器,便于通过浏览器查看内存中的对象分布。使用方法如下: ```bash jhat heapDump.hprof ``` 启动后,可以通过浏览器访问指定端口查看分析结果。 #### 5. jstack `jstack` 用于生成线程转储文件,帮助分析线程死锁或性能瓶颈。常用命令: ```bash jstack <LVMID> ``` 该命令输出当前 JVM 中的所有线程及其状态信息。 #### 6. jps `jps` 用于列出当前系统中所有的 Java 进程及其主类名称。常用命令: ```bash jps -l ``` 该命令会返回类似以下的结果: ``` 19483 com.wind.ssm.java8.test.JHatTest 19507 sun.tools.jps.Jps ``` #### 7. jcmd `jcmd` 是一个多功能命令行工具,支持发送诊断命令到正在运行的 JVM。例如: - 触发一次完整的垃圾回收: ```bash jcmd <LVMID> GC.run ``` - 查看 JVM 的帮助信息: ```bash jcmd <LVMID> help ``` #### 8. 方法区相关命令 方法区通常位于持久代(Permanent Generation),可以通过以下参数调整其大小: - 设置持久代最小值和最大值: ```bash -XX:PermSize=<size> -XX:MaxPermSize=<size> ``` 从 JDK 8 开始,持久代被元空间(Metaspace)取代,可以通过以下参数调整: ```bash -XX:MetaspaceSize=<size> -XX:MaxMetaspaceSize=<size> ``` 这些参数可以通过 `jinfo` 或 JVM 启动参数进行配置[^4]。 --- ### 示例代码 以下是一个生成堆 Dump 文件并分析的完整流程: ```bash # 步骤1:启动 Java 程序 java -Xms40m -Xmx40m -XX:NewSize=20M -XX:MaxNewSize=20M -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=15 JHatTest # 步骤2:获取 Java 进程 ID jps -l # 步骤3:生成堆 Dump 文件 jmap -dump:format=b,file=heapDump.hprof <LVMID> # 步骤4:解析 Dump 文件 jhat heapDump.hprof ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值