Java虚拟机内存监控

Sun Hotspot JVM

java version "1.6.0_12"

 

一、vm参数方式

1、-verbose:gc

会打印出每次GC执行的情况
[GC 进行GC以前活动的对象占用空间->GC以后无法清除的对象占用空间(Heap的可用空间大小),GC执行时间]

2、-XX:+PrintGCDetails 会打印出更加详细的信息
[GC [DefNew: GC执行前Young Generation活动对象占用空间->GC以后YG无法清除对象占用空间(YG可用空间), 执行时间] 执行前Heap的占用空间->执行后Heap的占用空间(Heap的可用空间), 总体执行时间]

3、-XX:+PrintGCTimeStamps
打印出每次执行GC的时刻

4、-XX:MinHeapFreeRatio=最小Heap可用空间百分比
当可用的Heap空间少于这个百分比,则这个Generation的Heap空间就会增长,以满足这个百分比

5、-XX:MaxHeapFreeRatio=最大Heap可用空间百分比
当可用空间百分比超出这个数值,该Generation的Heap空间会减少,以满足该百分比

6、-Xms 最小Heap空间

7、-Xmx 最大Heap空间

8、-XX:NewRatio=n
表示Young Generation和Tenured Generation的比例是1:n

9、-XX:NewSize=Young Generation的最小空间

10、-XX:MaxNewSize=Young Generation的最大空间

11、-XX:SurvivorRatio=n
Survivor区域和Eden区域的比值是1:n

12、-XX:+UseParallelGC 采用Throughput Collector

13、-XX:ParallelGCThreads=Throughput Collector采用的线程数

二、命令
1、 jps
与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号

2、jinfo
可以输出并修改运行中Java程序的VM参数。
用法 jinfo -opt  pid,如查看java进程3148的MaxPermSize : jinfo -flag MaxPermSize 3148

3、jmap
打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)
可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法
jmap -histo pid
如果连用
SHELL jmap -histo pid>a.log
可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象
jmap -dump:format=b,file=String 3024可以将3024进程的内存heap输出出来到String文件里
如查看Java进程3148创建的对象的类型和数量
jmap -histo 3148

查看内存占用情况
jmap –heap pid 


4、 jstat
极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
如查看进程3148的GC状态: jstat -gc 3148
参数详细解释如下:
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。


5、jconsole
6、jvisualvm

jvisualvm远程监控资源占用情况

  • 监控另外一台windows
    在文件java.policy(目录:C:/Program         Files/Java/jdk1.6.0_10/jre/lib/security)加入如下代码:
            grant codebase "file:${java.home}/../lib/tools.jar" {
            permission
            java.security.AllPermission;
            };
    运行cmd:jstatd -J-Djava.security.policy=jstatd.all.policy
  • 监控另外一台Linux
    远程机器启动jstatd
    首先需要准备一个java.policy文件,保存/home/admin/jstatd.java.policy
    grant codebase "file:${java.home}/../lib/tools.jar" {
       permission java.security.AllPermission;
    };
    启动jstatd
    jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-Djava.rmi.server.logCalls=true

    同时需要执行一个命令看看(linux下)
    hostname –i
    如果显示是127.0.0.1,则需要修改/etc/hosts文件,去掉对本机名的配置,让本机名解析到它的IP 地址,如10.10.90.4
    要对 JDK 6 上运行的应用程序进行性能分析,需要关闭该应用程序的类共享,否则该应用程序可能会崩溃。要关闭类共享,请使用 -Xshare:off 参数启动应用程序。

  • 运用JMX监控
    在应用程序,如Tomcat的catalina.sh的JAVA_OPTS上增加'-Xshare:off -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false'


 


参考文章:
http://newyearmsn.spaces.live.com/blog/cns!8EB7B670D83848EC!3429.entry
http://hi.baidu.com/qiaowz/blog/item/f08cac1ad3b96cfdae51337f.html


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值