Linux下获取java堆栈文件并进行分析
当服务器内存飙升或者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飙升的罪魁祸首! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |