工作需要,发现某个linux的进程多线程的性能非常差,于是乎想通过jvm的监控来看一下thread dump的信息。
java visualvm
首先想到的是这个jdk自带的软件,在JAVA_HOME/bin下面就有,通过配置linux JAVA_OPT既可使用,
1. 进入想要监控的linux机器,输入
export JAVA_OPTS='-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=xx.xx.xx.xx'
hostname那里要输外网的ip地址,如果发现hostname -i是内网的127.0.0.1就要改一下/etc/host了不然会连不上
加完JAVA_OPTS以后再启动对应监控的java程序应该就可以看到1099端口打开了
netstat -ntl | grep 1099 看到对应的端口已经打开,就可以连了
ps. 确保所有的防火墙都已经关闭了,这个不同版本linux的关闭方法不一样
大概有ufw disable xxxx, systemctl stop firewall.xxxxx , iptables
yourkit
java visualVM使用起来很方便,装上一个plugin 就可以直接看对应某一个线程的执行情况,而不用做thread dump,相信我,如果线程很多,每一次thread dump整个人都不太好
visualVM大法不错也很方便,但是在samples的面板里面只能看出哪些方法的使用时间比较多,却不知道方法之间的层级调用结构,这时候yourkit的强大就出来了,它可以方便的看到方法的调用结构,然后也可以和intellj或者eclipse结合直接反编译出代码来读
对于定位问题非常有帮助。
yourkit的话如果要远程监控要在windows,linux上都装上一个,版本统一
增加 -agentpath:VM 选项到Java命令行启动参数(依旧是加到JAVA_OPTS). yourkit的默认端口是10001
Linux x86, 32-bit Java
-agentpath:/bin/linux-x86-32/libyjpagent.so
Linux x86, 64-bit Java
-agentpath:/bin/linux-x86-64/libyjpagent.so
增加完之后,在启动对应要监控的JAVA程序就可以了
回到WINDOWS上添加远程机器就能够连上了,yourkit会提示安装反编译查看的plugin的
现在就可以定位具体的性能问题啦,撒花!
未来会将定位问题的分析过程。
网友评论