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