3

1、top命令:Linux命令。可以查看实时的内存使用情况。 然后使用大写M
进程按照内存使用排序如图:

图片描述

2、jmap -histo:live [pid],然后分析具体的对象数目和占用内存大小,从而定位代码。

jmap -histo:live 9823 | head -n 100 // 查询前100个内存使用过高的java类

结果如图:
图片描述
从结果上看String 类使用内存过高,可以检测一下代码中String 使用情况。这里只是我测试服的情况,小伙伴可以查看自己服务器上java程序的内存使用情况。

class name 是对象类型 说明一下

B  byte
C  char
D  double
F  float
I  int
J  long
Z  boolean
[  数组,如[I表示int[]
[L+类名 其他对象

3、jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用MAT工具分析是否存在内存泄漏等等。

jmap -dump:live,format=b,file=servermem.bin 9823

把这个bin文件dump下来使用MAT工具进行分析,如何使用下章讲解。
说明:由于环境不一样测试的结果很可能不一样哦

[小福利:]推荐一个非常好用的商业java分析工具 jProfile


kevin
215 声望28 粉丝

stay hungry stay foolish