Jvisualvm是JDK自带的一款性能分析工具

ゝ一纸荒年。 2022-07-13 14:15 271阅读 0赞

用法:Jvisualvm是JDK自带的一款性能分析工具

使用方式:

1.配置好JDK环境变量

491580-20160510150858202-1698656357.png

1.本地JVM监控略

2.远程JVM监控

491580-20160510150903984-2139586409.png

Center

491580-20160510150906984-47449965.png

491580-20160510150909937-1058448160.png

491580-20160510150911374-1115992681.png

用JMX对Resin内存状态进行监控 ,可以看到本地所有可监控的JVM实例。

原理就是通过添加一些JMX相关的JVM启动参数来控制JMX的行为,例如端口,验证信息等。Resin3.1.X版本的配置文件中有一些设置JVM args的配置项目,可以直接在里面修改。

Resin配置不使用认证的方式连接远程的服务器:

步骤如下:

1.修改远程服务器的resin.conf或者resin.xml文件,对于jvm参数配置这节添加或更改如下内容

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

-Djava.rmi.server.hostname=192.168.1.144

491580-20160510150912327-1327515778.png

注意红色部分,authenticate=false是关闭授权,hostname和port都是你连接必须的指定的IP和端口。

经过以上配置后你就可以在远程机器上用IP和端口9999进行远程Resin实例的监控了,记住防火墙要开放相应端口的访问。

注意:以上方法不只限于Resin,参数作用的是JVM,对任意JAVA程序都是适用的,举例如:

java -Xdebug -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=10000 -Djava.rmi.server.hostname=192.169.100.159

原始resin.xml

491580-20160510150913140-1850980570.png

配置安全验证:

491580-20160510150914015-2079853570.png

491580-20160510150915015-1715903758.png

设置步骤:

1.修改jmxremote.password文件的权限,设置为只有owner可读,chmod 600 jmxremote.password,权限设置错误,就会导致连接不上

2.修改jmxremote.access文件

491580-20160618192931448-1820645433.jpg

3.修改jmxremote.password 添加内容:

491580-20160618193021370-1155751334.jpg

jmxremote.access文件主要创建用户和设置用户权限

jmxremote.password文件设置用户密码

491580-20160510150916843-1894453852.png

参数配置:

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=true

-Djava.rmi.server.hostname=192.168.1.144

-Dcom.sun.management.jmxremote.access.file=$JAVA_HOME/jre/lib/management/jmxremote.access

-Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.password

$JAVA_HOME是你的环境变量的值,建议你将Java安装目录下面jre/lib/management/jmxremote.password.template这个文件拷贝一份,另存一个文件名,将文件中的用户名密码这一项前的注释取消并且更换为自己的用户名和密码。也可以将$JAVA_HOME/jre/lib/management下有jmxremote.access和jmxremote.password的两个文件复制到$TOMCAT_HOME/tomcat/bin目录下

主机JVM CPU与JVM内存图

491580-20160510150919280-1984894169.png

Center 1

类加载与线程

Center 2

此工具也可以手工执行垃圾回收和堆快照Dump

安装插件:

491580-20160510150922718-1786656862.png

查看Visual GC插件:

配置方法:

1.在$JAVA_HOME/bin目录下新建jstatd.all.policy文件

2.在文件里穿件如下内容:

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

  1. permission java.security.AllPermission;
  2. \};

3.给jstatd.all.policy授予执行的权限:chmod 777 jstatd.all.policy

4.在当前目录下,执行:jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.144 &

或者

jstatd -J-Djava.rmi.server.hostname=192.168.1.169 -J-Djava.security.policy=/usr/local/java/jdk1.6.0_45/bin/jstatd.all.policy

491580-20160618192606182-277358287.jpg

5.添加jstatd连接

491580-20160510150925562-1743705479.png

注意:在JMX创建的连接,无法查看Visual GC,但是可以重启或者用用户名认证在查看却可以

491580-20160510150928265-1893691346.png

其他插件:

491580-20160510150930905-2008085369.png

491580-20160510150933593-1636769414.png

Jconsole配置:

jdk1.7需要下载Jtop.jar包才能展示

加载D:\Java\jdk1.7.0_80\demo\management\JTop下的包

491580-20160510150934718-248206857.png

这个包需要自己下载,或者在jdk-6u20-windows-x64.exe版本安装完成后就存在,拷贝到jdk.1.7即可

环境:

centos6,tomcat7,jdk1.7

解决方案:
1,在服务器上找到catalina.sh文件,在该文件的这一行
# ——- Execute The Requested Command ————————————————————-

上面添加以下内容:
CATALINA_OPTS=”$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.1.2 -Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.managem
ent.jmxremote.authenticate=false”
然后启动tomcat进程

Tomcat上的配置参数:

catalina.sh用于修改linux的jmx。具体修改方 法是一样的。
在 rem ——- Execute The Requested Command ———————————————————-
加入:
set JAVA_OPTS=-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8050
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

如果同样遇到提示 必须限制口令文件的读取权限
或者:
set JAVA_OPTS=-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8050
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

Jvisualvm监控配置:

1、jboss启动脚本(如果是liunx则在环境变量JAVA_OPTS)中,jvm参数添加如下内容:
-Djava.rmi.server.hostname= #指定rmi地址,为jboss所在机器ip
-Dcom.sun.management.jmxremote.port= #指定jmx端口
-Dcom.sun.management.jmxremote.ssl=false #是否使用ssl安全连接
-Dcom.sun.management.jmxremote.authenticate=false #是否需要验证

2、打开本地命令窗口,进入$JAVA_HOME/bin目录,输入Jvisualvm.exe回车
打开Jvisualvm登陆界面,输入:
a、service:jmx:rmi:///jndi/rmi://10.25.7.27:9999/jmxrmi
(b、用户名c、密码)
登录就OK了
3、第二步中如果配置了验证则输入用户名密码,否则有没有输入都无关紧要
添加验证步骤如下:
a、$JAVA_HOME/jre/lib/management/jmxremote.password.template 密码示例文件
b、$JAVA_HOME/jre/lib/management/jmxremote.access 用户定义文件
(1)复制密码文件到自定义目录,去掉密码文件中monitorRole前边的#(去掉注释)
(2)chmod 600 (密码文件) 修改为只有当前登录用户能修改和阅读该密码文件
(3)启动脚本中添加或者修改:
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password
c、重启即可

注:
1、环境变量示例:
JAVA_OPTS=”-server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256m -Dfile.encoding=UTF8 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password”

JAVA_OPTS=”-server -Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256m
-Dfile.encoding=UTF8 -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=$JBOSS_HOME/jmxremote.password”

配置认证登陆:

491580-20160618183238948-302231729.jpg

配置java认证文件:

491580-20160618183547588-659914660.jpg

修改配置文件:

1.jmxremote.access

491580-20160618185436588-1995266734.jpg

2.jmxremote.password

491580-20160618185603354-466650710.jpg

3.修改jmxremote.password文件的权限,设置为只有owner可读,chmod 600 jmxremote.password,权限设置错误,就会导致连接不上

4.连接:

491580-20160618190034870-393450419.jpg

可以看到java的所有进程:

491580-20160618193303354-477352405.jpg

491580-20160618193444167-1125953486.jpg

http://blog.csdn.net/zczzsq/article/details/11660761

发表评论

表情:
评论列表 (有 0 条评论,271人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JDKJVM分析工具

    一、业务背景 对于分布式架构中的文件服务来说,由于涉及大量的IO流操作,很容易引发JVM的相关异常,尤其是内存溢出的问题; ![format_png][] 在最近的一