一度我曾以为在java profile领域,很难有工具能超越jprofiler及yourkit。
相比较jprofiler/ youkit优势:
1) 开源免费
2) 性能开销比jprofiler小很多.在kylin性能优化项目中,jprofiler性能损耗大,而visualvm 基本不受影响。
3) 被监控端无需额外安装agent
劣势: 没有jprofiler那样直观地树状展现方法调用栈。
由于visualvm远程监控比本地监控少很多功能,所以visualvm建议安装在linux服务器端。
1.1.1 下载visualvmVisualvm要求在jdk1.6_07上。
1.1.2 在被监控服务器上安装visualvm不用jdk自带的,因为jdk自带的滞后。从https://visualvm.dev.java.net/download.html下载。
先部署好java 6以上环境。
大部分应用都在linux上,所以visualvm安装在linux目录。
1.1.3 Windows机器上安装xming,输出linux图形化界面
主要是将linux display定向到windows xming server上。Xming使用请参考http://www.51testing.com/?uid-13997-action-viewspace-itemid-99183。
在linux shell上
export DISPLAY=windows ip:0
./visualvm &
如:
1.1.4 安装插件
Tools->plugin。
1.1.5 设置java允许jmx访问
少这个步骤,则cpu sample会无数据。
可以设置java jmx选项为无验证。
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
也可以:
[admin@QA-145-1 ~]$ ps -ef|grep java
admin 32289 32281 99 14:06 pts/7 00:09:21 /usr/alibaba/java/bin/java -Dprogram.name=run.sh -server -Xms2g -Xmx2g -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseCompressedOops -XX:+DoEscapeAnalysis -XX:+AggressiveOpts -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djboss.server.home.dir=/home/admin/kylin/deploy/jboss_server -Djboss.server.home.url=file:/home/admin/kylin/deploy/jboss_server -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl -Dorg.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XML11Configuration-Dcom.sun.management.config.file=/home/admin/kylin/deploy/conf/jmx/jmx_monitor_management.properties-Dapplication.codeset=GBK -Ddatabase.codeset=ISO-8859-1 -Ddatabase.logging=false -Djava.endorsed.dirs=/usr/alibaba/jboss/lib/endorsed -classpath /usr/alibaba/jboss/bin/run.jar:/usr/alibaba/java/lib/tools.jar org.jboss.Main
[admin@QA-145-1 ~]$ cat /home/admin/kylin/deploy/conf/jmx/jmx_monitor_management.properties |grep -v '#'
com.sun.management.jmxremote.port=2009
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.authenticate=true
com.sun.management.jmxremote.password.file=/home/admin/kylin/deploy/conf/jmx/jmx_monitor_users.properties
com.sun.management.jmxremote.access.file=/home/admin/kylin/deploy/conf/jmx/jmx_monitor_roles.properties
[admin@QA-145-1 ~]$ cat /home/admin/kylin/deploy/conf/jmx/jmx_monitor_users.properties |grep -v '#'
monitor monitor
control control1
[admin@QA-145-1 ~]$ cat /home/admin/kylin/deploy/conf/jmx/jmx_monitor_roles.properties |grep -v '#'
monitor readonly
control readwrite
1.1.6 采样cpu或者memory对象
点击sample,cpu sample检查哪些方法耗时多。
Memory sample:检查哪些类占内存多
这里点击settings设置过滤规则。
1.1.7 安装jconsole plugin
点击'Add JAR/Folder'按钮,
添加JDK_HOME/demo/management/JTop/JTop.jar
参考:
http://zzxanadu.javaeye.com/blog/600183
1.1.8 安装eclipse插件
https://visualvm.dev.java.net/eclipse-launcher.html
下载解压到eclipse安装目录。
运行应用程序,弹出的launcher选择visualvm,将激活visualvm.