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

使用Java visualVM的原因:

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

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

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

?


1

2

3

grant codebase "file:${java.home}/../lib/tools.jar"{

  permission java.security.AllPermission;

};

  注意,这里不建议进行复制,建议手敲一遍,避免因为半角和圆角符号导致错误。另外,内容必须如此,否则报错,提示没有权限:

?


1

2

3

4

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:

?


1

sudo apt-get install jvisualvm

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

?


1

jvisualvm --jdkhome ${JAVA_HOME}

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

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

?


1

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

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

  如果还需要RMI日志功能的话,还可以加上启动参数-J-Djava.rmi.server.logCalls:

?


1

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的参数:

?


1

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,则在连接服务器时需要输入密码

  这段脚本会阻塞当前的命令行,如果不想其阻塞,可以在最后打个空格,再加个&符号即可,此时这条命令会被当作作业添加到后台启动:

?


1

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了如指掌了。

时间: 2024-10-30 07:39:32

Ubuntu下使用Java visualVM对Java程序进行性能分析的相关文章

Ubuntu下Java调用IKAnalyzer中文分词程序失效

庖丁解牛等其它中文分词程序比较后发现,IKAnalyzer的中文分词效果好,程序调用简单.所以采用IKAnalyzer作为我们中文分词的程序. 调用IKAnalyzer来进行中文分词的代码十分简单:  代码如下 复制代码 /** * 传入一个中文语句,返回一个List列表,列表中的每一个元素是一个String类型的分词之后的中文词组 */ public static ArrayList<String> testJe(String testString) throws Exception {  

Ubuntu下JDK7安装全过程并调试第一个带包的java程序

第一步:下载jdk-7-linux-i586.tar.gz 第二步:解压安装 cd /usr/libsudo mkdir jvm cd {你的目录jdk压缩文件目录} sudo tar zxvf jdk-7-linux-i586.tar.gz  -C /usr/lib/jvm  cd /usr/lib/jvm  sudo mv jdk1.7.0/ java-7-sun 第三步:修改环境变量 vim ~/.bashrc (如果没有安装vim先执行:sudo apt-get install vim)

ubuntu下配置java环境

配置JDK环境   下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 好吧!在下载之前我们要先选中"Accept License Agreement" 然后,才允许我们下载. 等等有好几个linux版本的 JDK,那么应该选择那个呢?我们先来看看他们有什么不同. x86对应的是32位操作系统下的应用程序,x64对应的是64位操

Java程序内存分析Java VisualVM(Visual GC)

VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回收器.执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作. 在内存分析上,Java VisualVM的最大好处是可通过安装Visual GC插件来分析GC(Gabage Collection)趋势.内存消耗详细状况. 一  Visual GC(监控垃圾回收器) Java Visu

ubuntu下配置java环境【转】

转自:http://www.cnblogs.com/fnng/archive/2013/01/30/2883815.html 配置JDK环境   下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 好吧!在下载之前我们要先选中"Accept License Agreement" 然后,才允许我们下载. 等等有好几个linux版本

mysql数据库-远程连接服务器上,在自己的帐号下建立java连接mysql的程序,但是一直连接不上

问题描述 远程连接服务器上,在自己的帐号下建立java连接mysql的程序,但是一直连接不上 我是通过远程连接在实验室机房的一台机器(linux操作系统)上,然后在该机器上建立JAVA程序,其中涉及到连接mysql数据库的操作,但是在获取连接时一直提示"Communications link failure",涉及的代码为:connect=DriverManager.getConnection(""jdbc:mysql://localhost:3306/pyq_te

数据库连接-为什么在MyEclips下运行链接数据库的java程序会报异常,但在dos下可以。

问题描述 为什么在MyEclips下运行链接数据库的java程序会报异常,但在dos下可以. import java.sql.*; public class Connect { /** * @param args */ public void getConnection() { String driverName = ""com.microsoft.sqlserver.jdbc.SQLServerDriver""; Connection dbConn=null; t

ubuntu下搭建JAVA开发环境【转】

转自:http://jingyan.baidu.com/article/86fae346b696633c49121a30.html JAVA开发环境是一种跨平台的程序设计语言,可以在windows.LINUX等操作系统上进行开发.小编以前是做LINUX C开发的,最近因为工作,需要在UBUNTU下进行java开发环境的搭建,故写下这篇经验,和大家共享.参考.本篇经验分四步: 1)下载JDK 2)下载eclipse 3 ) 安装JDK 4)安装eclipse   工具/原料   UBUNTU ec

在ubuntu 下运行一个java webapp项目,tomcat6控制台报错

问题描述 报错信息如下:java.io.IOException: Cannot run program "ipconfig": java.io.IOException: error=2, No such file or directoryat java.lang.ProcessBuilder.start(ProcessBuilder.java:460)at java.lang.Runtime.exec(Runtime.java:593)at java.lang.Runtime.exec