zoukankan      html  css  js  c++  java
  • Java jvisualvm简要说明(转)

    转自:http://blog.csdn.net/a19881029/article/details/8432368

    jvisualvm能干什么:监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析...

    jvisualvm已经被集成在jdk1.6以上的版本中(不是jre)。自身运行需要最低jdk1.6版本,但是可以监控运行在jdk1.4以上版本的Java程序

    以jdk1.6update45(jdk1.6update45自带的jvisualvm)来做说明,当然也可单独下载独立的jvisualvm,正常安装完jdk后,至jdk的bin目录下,运行jvisualvm.exe即可

    网上有人说jvisualvm对ntfs的硬盘格式支持的不好(都说不好,也没说到底哪里不好),反正我用着是挺正常的,不管怎么样先把解决方式记下来吧

    创建jvisualvm.exe的快捷方式,右键快捷方式选择属性,在“目标”栏中追加"-XX:+PerfBypassFileSystemCheck"

    程序运行后会自动监控本机运行的java程序(Local标签下,远程服务器上的java程序需要另行配置),如果是下载的jvisualvm,解压后,运行bin目录下的jvisualvm.exe即可

    Local标签下的第一个VisualVM为jvisualvm对自身的监控,可以看到消耗的资源还是很少的,第二个为本机的eclipse

    监控项总共分为Overview,Monitor,Threads和一个Sampler。

    1.Overview(jvm启动参数,系统参数)

    可以看到eclipse的启动参数

    (通过这些启动参数,可以判断程序是否有内存溢出)

    2.Monitor

    左上:cpu利用率,gc状态的监控

    右上:堆利用率,永久内存区的利用率

    左下:类的监控

    右下:线程的监控

    performGC:gc的详细运行状态

    HeapDump:堆的详细状态(可以看到堆的概况,里面所有的类,还能点进具体的一个类查看这个类的状态)

    3.Threads

    能够显示线程的名称和运行的状态,在调试多线程时必不可少,而且可以点进一个线程查看这个线程的详细运行情况

    监控服务器上的tomcat

    tomcat的配置文件catalina.sh中增加:

    [plain] view plain copy
     
    1. JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998   
    2.     -Dcom.sun.management.jmxremote.ssl=false   
    3.     -Dcom.sun.management.jmxremote.authenticate=false   
    4.     -Djava.rmi.server.hostname=192.168.58.164"  

    参数说明:

    [plain] view plain copy
     
    1. 指定了JMX启动的代理端口,这个端口就是visualvm要连接的端口(9998端口不能被别的程序使用netstat -an|gerp 9998)  
    2. Dcom.sun.management.jmxremote.port=9998  
    3. 指定了JMX是否启用ssl  
    4. Dcom.sun.management.jmxremote.authenticate=false  
    5. 指定了JMX是否启用鉴权(需要用户名,密码鉴权)  
    6. Dcom.sun.management.jmxremote.authenticate=false  
    7. 指定了服务器主机名  
    8. Djava.rmi.server.hostname=192.168.58.164  

    填写主机名:

    右键创建一个jmx连接:

    填写上端口号即可:

    配置完成:

    监控服务器上的java程序

    相较于监控tomcat要麻烦很多,要预先启动jstatd服务(${java_home}/bin目录下)

    jstatd是一个监控JVM从创建到销毁过程中资源占用情况并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务器程序,它是一个Daemon程序(后台进程),要保证远程监控软件连接到本地的话需要jstatd始终保持运行。

    jstatd运行需要通过-J-Djava.security.policy=***指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy(我放在了${java_home}/bin目录下),文件内容如下:

    [plain] view plain copy
     
    1. grant codebase "file:/home/123/123/jdk1.5.0_15/lib/tools.jar" {   
    2.     permission java.security.AllPermission;   
    3. };   

    然后使用这个策略文件启动jstatd服务

    [plain] view plain copy
     
    1. [123@123 bin]$ pwd  
    2. /home/123/123/jdk1.5.0_15/bin  
    3. [123@123 bin]$ ./jstatd -J-Djava.security.policy=./jstatd.all.policy &  

    因为监控的过程中需要jstatd服务一直运行,所以加上了&,如果需要日志也可使用:

    [plain] view plain copy
     
    1. ./jstatd -J-Djava.security.policy=./jstatd.all.policy -J-Djava.rmi.server.logCalls=true  

    接下来就可以在jvisualvm中配置监控该服务器上运行的java程序了,和在jvisualvm中配置监控tomcat服务器的操作过程是一样的

    需要特别注意的是,有时在配置远程监控java程序的时候jvisualvm会报一个错误

    点击查看错误详情:

     connection refused to host:127.0.0.1初步判断和主机名有关系

    [plain] view plain copy
     
    1. [123@123 bin]# hostname -i  
    2. 127.0.0.1  
    [plain] view plain copy
     
    1. [123@123 bin]# hostname 192.168.58.168  

    修改完重启jstatd服务(网上很多人说要修改主机的/etc/hosts文件,但是我自己测试修改/etc/hosts文件是没有效果的,必须要修改主机名)

    填写主机名:

    这里要选添加一个jstatd连接:

    直接选择默认配置即可(默认使用1099端口):

    点击ok后,168上的所有java程序就会自动列出:

    PS:

    jvisualvm也是可以安装插件的,具体步骤为tool -> plugin ->aviable plugin,推荐一个非常好用的插件VisualGC

    安装完这个插件后,将会增加新的监控条目Visual GC,可以看到虚拟机内存各个区的使用情况

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/weizhxa/p/6530681.html
Copyright © 2011-2022 走看看