VisualVM工具介绍
2016-03-25 16:59
120 查看
#VisualVM
VisualVM是一个以监控、显示本地或者远程服务器 JVM工作情况,进行性能调优的工具。借助VisualVM,我们可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。
VisualVM是一个Java编写的绿色软件,属于开源范畴。VisualVM是使用插件Plugin的方式提供功能,默认提供了一些基本检测功能。如果需要进行拓展,可以使用下载插件的功能进行。
其中,左侧是显示本地和服务器上正在运行的不同进程。双击后可对其进行详细分析。
其中包括但不仅限于:
CPU使用情况分析
堆空间使用情况
线程运行状况分析(运行、休眠、等待、驻留等情况)
性能分析(Profiler)
GC调用情况分析(Eden/Old gen使用情况)
安装地址:Visual Download。
安装时请注意自己的JDK版本是否符合要求。
软件安装成功后即可对本机进程进行监视,分析。可以在
进入服务器中,使用命令
解决方法为建立一个文件
内容含义为给tools.jar文件增加安全权限。增加的安全权限为原有的java安全权限(也就是权限不变)。
然后在服务器中使用命令
**注意:**jstatd.all.policy应为绝对路径或者此文件在当前目录中,默认开启1099端口。启动此进程会将console阻塞,可采取
点击添加jstatd连接,输入服务器ip,默认端口为1099,应与服务器端保持一致。这样就可以看到服务器端的java进程了。
如果还是没看到
查看
采取此种方法,只能在查看服务器端进程的堆空间信息,不能查看CPU相关信息。如果需要查看,则需要在服务器端绑定JMX
可以增加JVM参数
注:
-Dcom.sun.management.jmxremote.port :这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
-Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
-Dcom.sun.management.jmxremote.authenticate=false 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
2,3两个是固定配置,是 JMX 的远程服务权限的
修改方法
J2EE
如果你要在J2EE环境中配置这些参数,那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,其启动文件中来配置,Tomcat是在catalina.sh中配置。
运行java类
直接将以上参数加入命令中
eg:
运行Hadoop
在mapred-site.xml配置文件里面有个mapred.child.java.opts配置,可以用来指定JVM参数。详情请参考
http://www.iteblog.com/archives/981
运行后就可以进行查看远程服务器上的进程的运行情况了。
不过注意要在测试之后将这些配置删除哦。会影响性能,给黑客攻击留下后门的。
【参考资料】
http://ihuangweiwei.iteye.com/blog/1219302
http://blog.itpub.net/17203031/viewspace-765810/
VisualVM是一个以监控、显示本地或者远程服务器 JVM工作情况,进行性能调优的工具。借助VisualVM,我们可以实现对JVM内存各个子池、CPU、垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题。
VisualVM是一个Java编写的绿色软件,属于开源范畴。VisualVM是使用插件Plugin的方式提供功能,默认提供了一些基本检测功能。如果需要进行拓展,可以使用下载插件的功能进行。
运行展示
其中,左侧是显示本地和服务器上正在运行的不同进程。双击后可对其进行详细分析。
其中包括但不仅限于:
CPU使用情况分析
堆空间使用情况
线程运行状况分析(运行、休眠、等待、驻留等情况)
性能分析(Profiler)
GC调用情况分析(Eden/Old gen使用情况)
软件安装
VisualVM是安装在客户端上的软件,如果需要分析远程服务器的话只需要在服务器端启动jstatd进程或者注册JMX服务即可进行分析。安装地址:Visual Download。
安装时请注意自己的JDK版本是否符合要求。
软件安装成功后即可对本机进程进行监视,分析。可以在
工具->插件中添加你需要的插件。
远程服务器连接
VisualVM使用jstatd进程或JMX与远程服务器连接。连接方式如下:jstatd
jstatd是一个监控 JVM 从创建到销毁过程中资源占用情况并提供远程监控接口的 RMI ( Remote Method Invocation ,远程方法调用)服务器程序,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行。进入服务器中,使用命令
jstatd,会出现以下错误
Could not create remote object access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372) at java.security.AccessController.checkPermission(AccessController.java:559) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.System.setProperty(System.java:783) at sun.tools.jstatd.Jstatd.main(Jstatd.java:139)
解决方法为建立一个文件
jstatd.all.policy,文件内容为
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
内容含义为给tools.jar文件增加安全权限。增加的安全权限为原有的java安全权限(也就是权限不变)。
然后在服务器中使用命令
jstatd -J-Djava.security.policy=jstatd.all.policy。
**注意:**jstatd.all.policy应为绝对路径或者此文件在当前目录中,默认开启1099端口。启动此进程会将console阻塞,可采取
screen命令将其放入后台执行。
点击添加jstatd连接,输入服务器ip,默认端口为1099,应与服务器端保持一致。这样就可以看到服务器端的java进程了。
如果还是没看到
查看
/etc/hosts是否存在127.0.0.1的地址映射。如果存在,将其全部改成服务器的ip地址即可(别忘了重启jstatd)。
采取此种方法,只能在查看服务器端进程的堆空间信息,不能查看CPU相关信息。如果需要查看,则需要在服务器端绑定JMX
JMX
JMX: Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。可以增加JVM参数
-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
注:
-Dcom.sun.management.jmxremote.port :这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
-Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
-Dcom.sun.management.jmxremote.authenticate=false 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)
2,3两个是固定配置,是 JMX 的远程服务权限的
修改方法
J2EE
如果你要在J2EE环境中配置这些参数,那么你需要在J2EE应用服务器或者Servlet容器相关启动参数设置处指定,其启动文件中来配置,Tomcat是在catalina.sh中配置。
运行java类
直接将以上参数加入命令中
eg:
java -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar myJob.jar
运行Hadoop
在mapred-site.xml配置文件里面有个mapred.child.java.opts配置,可以用来指定JVM参数。详情请参考
http://www.iteblog.com/archives/981
运行后就可以进行查看远程服务器上的进程的运行情况了。
不过注意要在测试之后将这些配置删除哦。会影响性能,给黑客攻击留下后门的。
【参考资料】
http://ihuangweiwei.iteye.com/blog/1219302
http://blog.itpub.net/17203031/viewspace-765810/
相关文章推荐
- 弹性容量产品设计
- Java EE实现直接进入登录界面-JS页面跳转(一)
- vim 在linux下中如何设置显示行数
- 数据库SQL性能调优
- [leetcode] 272. Closest Binary Search Tree Value II 解题报告
- 找重复数与过河问题
- declaration may not appear after executable statement in block
- Java中的IP对象以及本地域名解析
- 8. 管理软件包
- 实验一. 命令解释程序的编写
- Android官方开发文档Training系列课程中文版:管理Activity的生命周期之Activity的重建
- VS每次都重复编译的问题
- Do It :Tomorrow(治好你的拖延症)
- 自定义PullToRefresh正在刷新的时候不能滑动listview问题解决
- C++ - this指针
- Jsp El表达式使用问题javax.el.ELException: Failed to parse the expression
- Spring batch 入门学习教程(附源码)
- iframe
- mojo 接口示例
- java中常见的3种自动任务