Ubuntu下使用Java visualVM对Java程序进行性能分析

使用Java visualVM的缘由:html

  体积小,不耗内存,操做简单,功能全。关于Java visualVM和其余性能测试工具的比较,网上有不少文章,去搜搜看吧。java

1. 在服务器上配置jstatd的security policy文件。shell

  jstatd是一个监控JVM(Java Virtual Machine,Java虚拟机)从建立到销毁过程当中资源占用状况,并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务程序,它是一个Deamon程序,要保证远程监控软件链接到本地的话,须要始终保持jstatd运行。jstatd运行须要经过-J-Djava.security.policy=(某个文件的路径名,这个文件指定了安全策略)。所以咱们须要在服务器上创建这个文件,文件可随意起名,这里我取名为jstatd.policy。文件内容必须以下:安全

grant codebase "file:${java.home}/../lib/tools.jar"{
  permission java.security.AllPermission;
};

  注意,这里不建议进行复制,建议手敲一遍,避免由于半角和圆角符号致使错误。另外,内容必须如此,不然报错,提示没有权限:服务器

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"
    at......

2. 修改服务器hosts文件中的IP地址工具

  要使Java visualVM成功链接到服务器上,服务器端因该在/etc/hosts文件中把本机地址设置为实际的IP地址(好比192.168.3.123),而不是127.0.0.1。能够先使用hostname -i查看,再用vi修改性能

3. 在用于查看服务器的机器上启动JvisualVM测试

  1.先安装JvisualVM:加密

sudo apt-get install jvisualvm

  2.运行JvisualVM,注意这里须要加上Java的路径:命令行

jvisualvm --jdkhome ${JAVA_HOME}

  注意:${JAVA_HOME}是指在Ubuntu系统中JDK的环境变量

4. 在服务器上运行jstatd程序

jstatd -J-Djava.security.policy=jstatd.policy

  注意:这里的jstatd.policy即为刚刚建立的关于安全策略的文件名,还须要指定这个文件的路径,好比:/usr/lib/jstatd.policy

  若是还须要RMI日志功能的话,还能够加上启动参数-J-Djava.rmi.server.logCalls:

jstatd -J-Djava.security.policy=jstatd.policy -J-Djava.rmi.server.logCalls=true

  以后就能够查看这台服务器上的JVM运行状况了

5. 经过Java JvisualVM链接到服务器

  在Java visualVM程序窗口左侧“远程”项目右键选择“添加远程主机”,在弹出的对话框中输入远程主机的IP地址,确认提交之后能够看到相应的主机和运行在上面的Java程序,链接成功后会显示该主机上运行的Jstatd机器PID。

  经过以上方式链接服务器有一个问题,不能监控服务器的CPU使用状况,提示咱们创建JMX,查阅资料发现,能够在服务器启动jstatd加入JMX的参数:

jstatd -J-Djava.rmi.server.hostname=192.168.3.123  -J-Djava.security.policy=jstatd.policy  -J-Dcom.sun.management.jmxremote.port=4444 -J-Dcom.sum.management.jmxremote.ssl=false  -J-Dcom.sun.management.jmxremote.authenticate=false

  注意:上述脚本为一句,就是一行,不要自行换行,不然不能启动jstatd。其中:

  -J-Djava.rmi.server.hostname表示服务器的地址;

  -J-Djava.security.policy表示使用的安全策略文件路径;

  -J-Dcom.sun.management.jmxremote.port表示暴露服务器JVM给其余机器的端口号;

    -J-Dcom.sum.management.jmxremote.ssl=false表示对RMX传输不加密

  -J-Dcom.sun.management.jmxremote.authenticate=false表示其余机器链接服务器时不须要验证,若为true,则在链接服务器时须要输入密码

  这段脚本会阻塞当前的命令行,若是不想其阻塞,能够在最后打个空格,再加个&符号便可,此时这条命令会被看成做业添加到后台启动:

jstatd -J-Djava.rmi.server.hostname=192.168.3.123  -J-Djava.security.policy=jstatd.policy  -J-Dcom.sun.management.jmxremote.port=4444 -J-Dcom.sum.management.jmxremote.ssl=false  -J-Dcom.sun.management.jmxremote.authenticate=false &

  这样启动后怎么中止?请看这里:http://soft.chinabyte.com/os/379/12244379.shtml

  有了上述步骤后,你就能够对远程服务器的JVM了如指掌了。

相关文章
相关标签/搜索