阐明:在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都须要进行配置,比拟不便。
毛病:无奈对某个过程执行垃圾回收,也无奈应用抽样性能,看不到线程状态面板,无奈无效的排查线程死锁等问题
发表回复