系统相关
首页 > 系统相关> > 用Java VisualVM配合Jstatd远程监控Java服务(ubuntu)

用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 &


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???

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