最近在项目中自感程序木有问题,也没有什么错误日志出来。但就是有人反映服务慢,有时连不上的情况。为了解决这么妖的问题只能去详细的看看运行中的程序到底出了什么情况,这时如果有个比较好的监控工具可以监控运行中的程序那就完美了。问了度娘才知道原来jdk已经给我们提供了非常多的监控工具,方便我们实时了解我们些程序哪出问题了。不得不说人家考虑的就是周全。下面就来介绍下几款自带的监控程序吧。
oracle jdk 自带非常多的小程序,可以进到%JAVA_HOME%\bin中查看
监控工具一:JvisualVm
1,在命令行中敲入JvsiualVm可以启动
打开后进入页面
打开后他会自动关联本机的已经运行的java程序,点击某个进入某个程序后可以了解选中程序的运行情况。
2,当我们在使用JvisualVm做程序监控的时候,我们更多的是希望去监控远程服务器中程序,以便我们能做更好的分析。如果想去监控远程程序,前提需要远程程序支持才能连接的上去。那么我们就来看下如何配置程序以支持远程监控。
进入到\jre\lib\management 目录下
依赖jmxremote.password.template 生成*.password 文件
这里我将他拷贝到/opt/service/jmx目录下,方便我统一管理
cp jmxremote.access /opt/service/jmx/jmx.access
cp jmxremote.password.template /opt/service/jmx/jmx.password
为避免访问权限问题,我们要确保他们有权限,可以使用命令:chmod 600 jmx.* 授权
打开jmx.password 文件添加用户名和密码,用户名和密码之间使用空格分开,多个账号可以使用换行分开
例如:
打开jmx.access 为添加的账号授权
这些基础配置好后,我们来看下程序需要做哪些设置。
2.1 再启动参数中需要添加参数,开启远程监控的端口
以下是我写的一个测试脚本:
#!/bin/bash
opts="-Xmx256M -Djava.rmi.server.hostname=11.11.1.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8998 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/opt/service/jmx/jmx.password -Dcom.sun.management.jmxremote.access.file=/opt/service/jmx/jmx.access"
java $opts -jar /opt/service/whroid-java-1.0-SNAPSHOT.jar &
参数说明:
-Djava.rmi.server.hostname=11.11.1.1 //远程服务器的ip地址
-Dcom.sun.management.jmxremote.port=8998 //jmx开启的监控端口,必须保证没有被占用
-Dcom.sun.management.jmxremote.ssl=false //是否开启ssl验证
-Dcom.sun.management.jmxremote.authenticate=true //是否需要验证
-Dcom.sun.management.jmxremote.password.file=/opt/service/jmx/jmx.password //账号存放的文件
-Dcom.sun.management.jmxremote.access.file=/opt/service/jmx/jmx.access" //账号权限管理 启动上面的脚本启动服务后,远程机器和程序已经支持了远程监控,使用JvisualVm链接既可以对启动的程序进行监控 监控二:jconsole 服务器和程序按照上面的配置好后,也可以使用jconsole进行监控。
启动方式和JvisualVm一样,改成Jconsole 既可以打开jconsole。
同样使用上面的账号进行登录。
监控三:除上面两款可视化的监控工具外,jdk还提供了很多的命令小工具,可以通过相关命令了解程序的运行情况。