用Java VisualVM配合Jstatd远程监控Java服务(ubuntu)
作者:互联网
服务端配置
1.确定java执行文件路径
root@****:~# which java
/usr/bin/java
那么/usr/bin/java就是执行文件的路径
2.根据执行文件路径找到安装路径
root@****:~# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Dec 21 14:55 /usr/bin/java -> /etc/alternatives/java
root@****:~# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Dec 21 14:55 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
最后确定了java安装路径为/usr/lib/jvm/java-8-openjdk-amd64/
3.进入java安装路径的bin目录,找到jstatd
root@****:/usr/lib/jvm/java-8-openjdk-amd64/bin# cd /usr/lib/jvm/java-8-openjdk-amd64/bin
root@****:/usr/lib/jvm/java-8-openjdk-amd64/bin# ls
clhsdb idlj java javah jcmd jfr jjs jrunscript jstat native2ascii rmic schemagen tnameserv wsimport
extcheck jar javac javap jdb jhat jmap jsadebugd jstatd orbd rmid serialver unpack200 xjc
hsdb jarsigner javadoc java-rmi.cgi jdeps jinfo jps jstack keytool pack200 rmiregistry servertool wsgen
如果无法进入bin目录,或找不到jstatd,说明服务器上只安装了jre,没安装jdk,这种情况请先自行安装jdk
4.进入/usr/lib/jvm/java-8-openjdk-amd64/bin目录,然后用vim新建jstatd.all.policy文件
root@****:~# vim jstatd.all.policy
5.在文件中键入以下内容
grant codebase "file:/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar" {
permission java.security.AllPermission;
};
其中/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar,是指定tools.jar的路径,tools.jar一般在java安装路径下的lib文件夹里面,找不到tools.jar,也说明没安装jdk
6.运行jstatd
root@****:~# nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=0.0.0.0 -p 1099 &
- -J-Djava.security.policy=jstatd.all.policy用于指定policy文件的路径,由于我们刚才就是在同目录下创建的policy文件,所以这里直接指向刚才创建那个文件即可。
- -J-Djava.rmi.server.hostname=0.0.0.0用于指定本机的ip,请将0.0.0.0替换成本机真实ip
- -p 1099用于指定暴露给远程的端口,默认也是1099
7.如果用阿里云或有防火墙的同学,请看这里,首先键入以下命令,来查看服务器运行程序的信息
root@****:~# netstat -ntlp
不出意外的话,我们能从结果中找到jstatd的运行信息,如下
tcp6 0 0 :::42313 :::* LISTEN 21204/./jstatd
tcp6 0 0 :::1099 :::* LISTEN 21204/./jstatd
看到没有,在实际运行中,jstatd会用到两个端口,一个是我们刚才指定的1099,还有一个不知道是什么的42313端口,而且很坑的是这个42313端口会每次运行jstatd时随机分配,并且无法手动指定。
所以用阿里云或有防火墙的同学,请在运行jstatd之后,使用netstat -ntlp查看端口号之后,并在阿里云安全组或防火墙中做好白名单。
当然也有办法可以解决,具体可参考这位大神的文章:
https://cloud.tencent.com/developer/article/1376769
这样服务端就搞完了,下面我们搞客户端
客户端配置
1.客户端搞起来就很简单了,首先在客户端电脑上进入jdk安装路径下的bin目录下,在bin目录下找到
jvisualvm.exe
2.打开它,右键远程,添加远程主机
3.在弹出的面板中输入服务器ip,不加端口,只输ip就ok
4.不出意外的话,添加远程主机之后就能看到服务端的java程序了,双击就可以看到相应的监控信息了
常见问题
1.找不到jstatd???
- 安装jdk了吗?如果java程序能运行,找不到jstatd多半是没安装jdk
2.怎么在后台运行jstatd???
在命令前面加nohup,在命令后面加&,比如这样:
nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=0.0.0.0 -p 1099 &
3.添加主机之后看不到下面的程序呀???
jstatd有两个端口,看一下是不是防火墙里面的白名单是不是两个端口都打开了
4.连是连上了,但是只看到得Jstatd这一个程序,咋回事嘛???
在服务端运行jstatd时,请保证是在root下运行,否则就会出现这种情况
标签:bin,java,Jstatd,lib,usr,jstatd,ubuntu,Java,root 来源: https://blog.csdn.net/shuang3281/article/details/113311178