说明:在linux系统中对jvm有一套监控命令,命令的使用方法即作用本文不做赘述,可自行学习(参考地址:http://blog.csdn.net/fenglibing/article/details/6411999)。

本文重点介绍监控工具jvisualvm(另称为VisualVM)的使用。

Jvisualvm的启动

1、 需要安装jdk

2、 在jdk的安装路径下的bin目录中找到jvisualvm.exe,双击即可启动

(我本地的路径为D:Program FilesJavajdk1.8.0_20binjvisualvm.exe)

启动后的界面如图

image.png

Jvisualvm监控本地资源

如果java程序运行在本机,则jvisualvm启动之后,默认在“本地”一栏中可以直接看到

image.png

Jvisualvm监控远程资源

使用jmx方式

由于我监控的目标机使用的是tomcat,因此以tomcat为例进行说明

Tomcat加war包的配置

这种比较场景,将服务打成war包放在tomcat中,修改tomcat的配置即可进行监控。

步骤1:在需要监控的目标机上找到tomcat的配置(linux为catalina.sh,Windows为catalina.bat,下面以linux的catalina.sh为例进行说明)

步骤2:在catalina.sh中添加以下配置

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998

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

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

-Djava.rmi.server.hostname=172.31.7.37"

添加后的效果如图;

image.png

步骤三:添加之后重启tomcat

步骤四:在jvisualvm的“远程”栏下右键添加远程主机

步骤五:在远程主机中右键选择添加jmx链接

image.png

步骤六:在jmx链接的配置中输入目标机ip及端口,连接即可

image.png

步骤七:双节已添加的远程机器,即可打开主要的监控界面

image.png~~~~

服务内嵌tomcat的配置

这种方式在linux下也比较常见,服务不是war包放在tomcat下,而是通过引用tomcat的jar包调用内置的tomcat来运行。这种方式通常在服务的启动脚本中添加相关监控配置,常见的启动脚本命名为start.sh、server.sh等

以基线项目的安全监管服务文字鉴黄接口为例:

需要监控的服务为safety-server,启动目录:safety-server/bin/ start.sh

在服务的bin目录下,编辑启动脚本:vim start.sh

操作1:执行脚本中添加配置项参数:
image.png

操作2:给配置参数设定配置信息

image.png

操作3:重启服务

Jstatd方式

VisualVM在监控本地JVM的时候是很方便的。只要应用程序运行起来,我们就可以从VisualVM里面监控出来。但是有些功能在该监控模式下会有限制

设置的步骤如下:

步骤一:在远程目标机上找到java的jdk安装路径(可以使用这个命令进行查找:find / -name java)

步骤二:在jdk的bin目录下查找是否存在jstatd小插件

查找命令:ls -l | grep jst

查找结果:

image.png

步骤三:在目录下创建安全策略文件,文件名为jstatd.all.policy (文件名可以自己取)

策略文件内容为

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

permission java.security.AllPermission;

};

即如图所示:

image.png

步骤四:查看homename值,是否为目标机自己的ip

查看命令:hostname –i
image.png

如果ip地址不对,需要修改/etc/hosts文件

步骤五:调用jstatd命令启动进程

启动命令:jstatd -J-Djava.security.policy=jstatd.all.policy
image.png

步骤六:监控程序VisualVM添加一个远程主机后,在选择添加jststd连接,直接确定即可

image.png

特别说明

Jmx方式说明

配置详细说明

1、针对添加的配置说明如下:

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=9998 ----------设置监控端口

-Dcom.sun.management.jmxremote.ssl=false -----------指定了 JMX 是否启用 ssl

-Dcom.sun.management.jmxremote.authenticate=false -------JMX 是否启用鉴权

-Djava.rmi.server.hostname=172.31.7.37" -------配置 server 的 IP

2、在监控端口时,注意需要使用未被系统占用的端口,防止端口冲突。检测端口是否被占用使用如下命令:

netstat –an|grep 端口

Jstatd方式


优点:该方式可以比较直观的监控到服务器上所有的java程序,不用像jmx那样每个tomcat都需要进行配置,比较方便。

缺点:无法对某个进程执行垃圾回收,也无法使用抽样功能,看不到线程状态面板,无法有效的排查线程死锁等问题


travel
12 声望1 粉丝

好记性不如烂笔头