淘先锋技术网

首页 1 2 3 4 5 6 7

(1)查看目前虚拟机内各个区的内存占用情况,可以使用如下的命令

/opt/jdk/java/bin/jstat -gcutil -h3 $JAVA_PID 250 60

 

具体打印出的各个参数的意义可以google一下。

 

(2)查看某一天完整的内存随时间的变化情况,最好的办法是在jvm启动时里加上下面几个参数:

-verbose:gc -Xloggc:/home/admin/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

打印出的信息格式类似下面这样:

2010-05-17T11:16:17.017+0800: 261697.550: [GC [PSYoungGen: 491056K->17347K(493440K)]

1205158K->731961K(1554304K), 0.0424430 secs] [Times: user=0.09 sys=0.00, real=0.04 secs]

其中 1205158K->731961K 即表示经过本次gc,你总的内存由1205158K下降到731961K 。

 

(3)查看目前都是哪些对象占用了比较多的内存,可以执行下面的命令

/opt/jdk/java/bin/jmap -histo $JAVA_PID | head -n 10

 

表单里显示的占用最多内存的对象是char类型。

 

(4)对整个内存有个详细的了解,可以通过jmap把内存dump下来,然后使用mat打开查看。

/opt/jdk/java/bin/jmap -dump:format=b,file=dump.bin $JAVA_PID