说明:在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)
启动后的界面如图
Jvisualvm监控本地资源
如果java程序运行在本机,则jvisualvm启动之后,默认在“本地”一栏中可以直接看到
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"
添加后的效果如图;
步骤三:添加之后重启tomcat
步骤四:在jvisualvm的“远程”栏下右键添加远程主机
步骤五:在远程主机中右键选择添加jmx链接
步骤六:在jmx链接的配置中输入目标机ip及端口,连接即可
步骤七:双节已添加的远程机器,即可打开主要的监控界面
~~~~
服务内嵌tomcat的配置
这种方式在linux下也比较常见,服务不是war包放在tomcat下,而是通过引用tomcat的jar包调用内置的tomcat来运行。这种方式通常在服务的启动脚本中添加相关监控配置,常见的启动脚本命名为start.sh、server.sh等
以基线项目的安全监管服务文字鉴黄接口为例:
需要监控的服务为safety-server,启动目录:safety-server/bin/ start.sh
在服务的bin目录下,编辑启动脚本:vim start.sh
操作1:执行脚本中添加配置项参数:
操作2:给配置参数设定配置信息
操作3:重启服务
Jstatd方式
VisualVM在监控本地JVM的时候是很方便的。只要应用程序运行起来,我们就可以从VisualVM里面监控出来。但是有些功能在该监控模式下会有限制
设置的步骤如下:
步骤一:在远程目标机上找到java的jdk安装路径(可以使用这个命令进行查找:find / -name java)
步骤二:在jdk的bin目录下查找是否存在jstatd小插件
查找命令:ls -l | grep jst
查找结果:
步骤三:在目录下创建安全策略文件,文件名为jstatd.all.policy (文件名可以自己取)
策略文件内容为
grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;
};
即如图所示:
步骤四:查看homename值,是否为目标机自己的ip
查看命令:hostname –i
如果ip地址不对,需要修改/etc/hosts文件
步骤五:调用jstatd命令启动进程
启动命令:jstatd -J-Djava.security.policy=jstatd.all.policy
步骤六:监控程序VisualVM添加一个远程主机后,在选择添加jststd连接,直接确定即可
特别说明
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都需要进行配置,比较方便。
缺点:无法对某个进程执行垃圾回收,也无法使用抽样功能,看不到线程状态面板,无法有效的排查线程死锁等问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。