细说tomcat之应用监控

时间:2021-06-18 01:47:47

细说tomcat之应用监控

官网:http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html

Java应用程序的监控通过JMX实现,详见:https://docs.oracle.com/javase/tutorial/jmx/

一. 监控配置
对于Java Web应用程序而言,如果需要监控其当前运行状态,比如:内存,线程等情况。有2种方式:
(1)如果Web应用使用嵌入式容器(如:嵌入式Jetty或Tomcat),则在启动应用时启用JMX远程监控即可。
细说tomcat之应用监控
test-javamonitor是一个使用了嵌入式Servlet容器的Java Web应用,启动时开启JMX远程监控。

java -jar -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=%my.jmx.port% \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
test-javamonitor.jar

(2)如果Web应用直接部署在容器中,则不能直接监控到应用本身。这时可以开启容器的JMX远程监控,间接地监控应用的运行状态。
在Tomcat下,开启JMX远程监控很简单,分为在Windows平台和Linux平台2种情况说明。
其一,在Windows平台,开启Tomcat JMX远程监控:
新建文件${CATALINA_HOME}/bin/setenv.bat,内容如下:

set CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=%my.jmx.port% -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

其二,在Linux平台,开启Tomcat JMX远程监控:
新建文件${CATALINA_HOME}/bin/setenv.sh,内容如下:

CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=%my.jmx.port% -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

特别说明:
参见上述开启JMX远程监控示例,并没有开启远程访问认证,即:-Dcom.sun.management.jmxremote.authenticate=false。
如果需要开启访问认证,还需要指定相应认证参数,如下所示:

-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password

在${CATALINA_HOME}/conf/jmxremote.access文件中定义访问用户身份信息,格式如下:

monitorRole readonly
controlRole readwrite

如上,定义了2个用户:monitorRole只能读取监控信息,controlRole具备读写权限,可以执行JMX管理操作。

在${CATALINA_HOME}/conf/jmxremote.password文件中定义访问用户密码信息,格式如下:

monitorRole tomcat
controlRole tomcat

monitorRole用户密码为:tomcat,controlRole用户密码为:tomcat。
注意:在开启Tomcat远程监控访问认证的情况下,${CATALINA_HOME}/conf/jmxremote.password文件只能允许被运行Tomcat实例的操作系统用户访问,且只能有读权限。
否则无法启动Tomcat,报错:

错误: 必须限制口令文件读取访问权限: ../conf/jmxremote.password

细说tomcat之应用监控
以root用户启动tomcat实例,查看tomcat进程:
细说tomcat之应用监控
显然,tomcat实例是操作系统root用户启动的。则${CATALINA_HOME}/conf/jmxremote.password文件只能对root用户具备可读权限,即:
细说tomcat之应用监控

二. 查看监控数据

jdk中已经自带了非常方便的监控工具,如:jconsole,jvisualvm。
运行jconsole,新建连接:
细说tomcat之应用监控
如果配置了监控访问认证,输入对应用户名和口令。
细说tomcat之应用监控
完毕!