linux打印jvm内存堆栈_Linux下获取java堆栈文件并进行分析

当Linux服务器出现内存或CPU负载问题时,可以使用`top`命令定位Java进程PID,通过`jstack`生成线程堆栈日志,并分析线程状态。利用`jmap`导出堆内存快照,配合Eclipse Memory Analyzer工具,深入分析内存占用,找出问题根源。
摘要由CSDN通过智能技术生成

当服务器内存飙升或者cpu负载飙升的时候,可以使用如下步骤排查问题:

1、终端输入top命令,键盘大写的情况下按P(cpu负载率从高到低排序)或者M(内存使用率从高到低排序),可以查看导致cpu或者内存飙升的java pid。

2、jstack PID号 > jstack.log

上面的命令可以保存当前时刻的线程栈到 jstack.log 文件中(保存在当前路径下)

3、分析栈文件

3.1 grep 'java.lang.Thread.State' jstack.log  | wc -l

上述命令可以统计java.lang.Thread.State出现的次数

3.2  grep -A 1 'java.lang.Thread.State' jstack.log  | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n

该命令可以将线程栈文件的状态按次数排序显示

4、jmap -dump:format=b,file=heap.log pid

上述命令可以保存当前的堆情况到heap.log文件中。

5、将heap.log传输到windows系统下,复制一份,后缀改成.hprof

下载Eclipse的内存分析工具,地址:https://www.eclipse.org/mat/downloads.php

下载完成后,双击MemoryAnalyzer.exe,点击Open a Heap Dump

选择桌面上的堆文件,点击打开:

选择第一个内存分析报告,然后点Finish:

就会打开一个总体情况页面:

点击左下角的Table Of Contents,里面有多种分析供选择:

每一个选项几乎都有直观的饼状图显示对象的占用情况:

当然也有线程的堆使用情况分析,可以方便地找到占用大量内存的线程,找到真正导致内存、cpu飙升的罪魁祸首!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值