jvm 排查问题

内存问题:jmap

cpu问题:jstack

高手是怎么使用jstack精确找到异常代码的

1. 查看java中各个对象的内存使用


jmap 命令:JVM调优命令-jmap

简单一点:jmap -h 查看使用方法

2. 查看各个线程的情况


jstack -h 查看jstack的使用方法

3. 将top中信息与jstack对应

3.1 查看单个进程的top

     top -p [pid]


3.2 查看单个进程中各个线程数据

top -H -p [pid]


子线程也有自己的pid

3.3 将子线程的pid 转成16进制

printf "%x" [子pid]


3.4 拉取jstack

jstack [pid] > t.txt

3.5 将16进制去jstack拉出来的文件中匹配

匹配的值为 nid 。这样就将top中的线程数据与jstack中的线程数据对应起来。


### 关于 JVM 问题排查与性能调优的最佳实践 #### 性能监控工具的选择 Java 提供了一系列内置的性能监控和故障排查工具,这些工具可以帮助开发者深入了解 JVM 的运行状态。例如 `jstat` 可以用来查看垃圾回收 (GC) 的统计信息,当发现 GC 频率过高或者 GC 占用间过长,可以初步判断是否存在内存泄漏或其他资源瓶颈[^3]。 另外,`jps` 是一个简单的命令行工具,用于列出当前系统上正在运行的所有 Java 进程及其 ID。通过附加参数 `-lv`, 用户可以获得更详细的启动类路径和其他配置信息[^2]。 #### 垃圾回收机制分析 对于频繁发生的 Full GC 或长间暂停现象,应该重点检查对象分配模式以及引用链路是否合理。如果观察到新生代空间不足而触发过多 Minor GC,则可能需要调整年轻代比例 (`NewRatio`) 来平衡新旧两部分之间的容量分布;而对于长期存活的对象迁移到老年代后引发的老年区清理压力过大问题,则需考虑引入并发/并行算法来减少 STW 间[^4]。 #### 参数优化建议 针对不同应用场景下的工作负载特点制定相应的 JVM 启动参数至关重要: - **吞吐量优先场景**:推荐使用 Parallel Scavenge + Parallel Old 组合,并适当增大堆尺寸; - **延迟敏感型应用**:CMS(Concurrent Mark Sweep)/G1(Garbage First) 收集器更适合此类需求,它们能够在后台执行大部分耗操作从而降低前台线程受阻概率; - 对于小型嵌入式设备而言,由于硬件资源配置有限制,因此 Serial Collector 就显得尤为合适——尽管它仅支持单核处理但胜在其简单性和低开销特性之上。 以下是基于 G1 Garbage Collector 设置的一个典型例子: ```bash java -XX:+UseG1GC \ -Xms5g -Xmx5g \ -XX:MaxGCPauseMillis=200 \ -XX:InitiatingHeapOccupancyPercent=35 \ MyApp.jar ``` 上述脚本定义了一个固定大小为 5GB 的堆区域,期望最大停顿间为 200 毫秒,并且规定只有整个堆达到约 35% 使用率的候才会激活混合阶段清扫过程[^4]。 #### 日志记录与诊断数据采集 启用必要的调试日志有助于后续定位潜在隐患所在位置。可以通过如下方式开启跟踪功能: ```properties -verbose:gc -Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -XX:+PrintReferenceGC ``` 以上选项将会把每次发生垃圾回收事件的具体细节保存下来以便进一步研究分析[^1]。 --- 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值