#VisualVM
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

注:

  1. -Dcom.sun.management.jmxremote.port :这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
  2. -Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
  3. -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/

VisualVM工具介绍相关推荐

  1. VisualVM工具的使用

    1.VisualVM工具的使用 VisualVM,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的 ...

  2. 软件包管理 之 软件在线升级更新yum 图形工具介绍

    作者:北南南北 来自:LinuxSir.Org 提要:yum 是Fedora/Redhat 软件包管理工具,包括文本命令行模式和图形模式:图形模式的yum也是基于文本模式的:目前yum图形前端程序主要 ...

  3. IDEA IntelliJ 开发工具介绍

    IntelliJ IDEA 开发Java的IDE 官网:https://www.jetbrains.com/ 下面是该工具介绍,有兴趣的可以看下,基本一堆废话: 集成开发环境(IDE,Integrat ...

  4. postman 接口测试工具介绍

    postman 接口测试工具介绍 https://www.cnblogs.com/fly_dragon/p/9186745.html

  5. Java代码缺陷自动分析工具介绍

    Java代码缺陷自动分析工具介绍                                                                                     ...

  6. 77.Linux系统日志,screen工具介绍

    Linux系统日志 日志重要吗?必须的,没有日志我们怎么知道系统状况?没有日志如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到***时** ...

  7. Exchange Server 2003多服务器安装以及管理工具介绍

    Exchange服务器系列课程之二--Exchange Server 2003多服务器安装以及管理工具介绍 http://www.z8soft.com/article/server| 2011年4月1 ...

  8. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  9. Java新手看招 常用开发工具介绍

    Java新手看招 常用开发工具介绍 Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使 ...

最新文章

  1. 周鸿祎谈抢票:技术推动建立一个高效的公平社会
  2. gin context和官方context_Gin框架系列01:极速上手
  3. HTML5新特性之Mutation Observer
  4. liunx mysql端口没开_linuxmysql可以terminal登录,3306端口未打开原因记录(转)
  5. docker容器内漏洞_如何在2020年发现和修复Docker容器漏洞
  6. win32 destroywindow函数
  7. codeforces 451C. Predict Outcome of the Game 解题报告
  8. GAD游戏学院系列丛书发布,引爆峰会现场
  9. UIScrollView与分页的联合使用
  10. 1.2.4 List.contains方法——判断列表中是否包含指定元素
  11. 基于matlab仿真实例,基于MATLAB的新能源汽车仿真实例
  12. 李南江的前端课程知识点(三)HTML标签的学习
  13. 显卡虚拟化--最强实践
  14. 【清华大学】操作系统 陈渝——Part7 进程/线程 管理
  15. 服务器中的软件如何备份文件夹在哪里找,itunes备份文件在哪,如何找到itunes的备份文件...
  16. android虚拟器没有菜单,网易MuMu模拟器不显示Menu(菜单)键的解决办法
  17. 笔记01-如何创建一个vue3的项目
  18. python爬虫论文参考文献格式_Python爬虫进阶必备 | XX文学加密分析实例
  19. web前端三大主流框架是什么?
  20. 关于c中的%x及其它格式化符

热门文章

  1. 免费的云服务器,大家推荐哪个呢?
  2. 3DMAX 渲染AO贴图流程
  3. 【回溯专题】—— 回溯算法入门篇
  4. xfce上安装mysql_第一次把mysql装进docker里碰到的各种问题-Go语言中文社区
  5. 【QT】回调函数的实现
  6. 「云」上风景虽好,但不要盲目跟风
  7. picker-view-column自定义picker
  8. 编写名为censor的函数,用来把字符串中出现的每一处字母“foo”替换成“xxx”。例如,字符串“food fool”会变为“xxxd xxxl”。再不失清晰性的前提下程序越短越好
  9. 年历实现代码(java)
  10. stm32f103开发板入门到手进行开发