玩转Tomcat监控管理

要运行诊断程序,您可以在/manager/html导航到Tomcat的应用程序管理器界面,或者单击Tomcat Manager主页上的“Manager App”按钮。 应用程序管理器提供了一个用于快速管理应用程序的简单界面,以及用于排除内存泄漏故障的诊断部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“Find leaks”按钮可以对应用程序中的内存泄漏运行诊断检查。 当垃圾收集器无法通过删除应用程序不再需要的对象来释放工作内存时,会发生内存泄漏。 这会导致应用程序使用更多资源,直到它用完为止,从而产生致命的内存错误甚至内存溢出。 请注意,应谨慎使用此诊断检查,因为它会触发垃圾回收,对性能有一定的影响。

这个界面只是简单的访问Tomcat服务器的状态,使您能够快速查看相关数据。 后面的章节会有详细的讲解。

查询Tomcat指标

Tomcat Manager可以使用manager-jmx角色访问JMX代理servlet,该角色允许您从Web浏览器查询。 您可以在http://localhost:8080/manager/jmxproxy找到Tomcat的可用MBean列表(纯文本格式)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果要查询特定MBean的数据,可以按以下格式将参数添加到MBean的域,类型,名称和属性的URL中:

http://localhost:8080/manager/jmxproxy/?get=:type=,name=“”&att=<JMX_ATTRIBUTE>

在上述的JMX属性和MBean列中找到这些参数。 您可以使用以下命令查看HTTP连接器的最大请求处理时间的数据:

http://localhost:8080/manager/jmxproxy/?get=Catalina:type=GlobalRequestProcessor,name=“http-nio-8080”&att=maxTime

这将产生以下结果:

OK - Attribute get ‘Catalina:type=GlobalRequestProcessor,name=“http-nio-8080”’ - maxTime = 189

命令模式使用起来比较复杂并且不直观,同时不能比较多个指标或查看数据随时间的变化情况。 为了更深入地了解Tomcat的运行状况和性能,我们需要使用其他工具,如JConsole。

为Tomcat监视工具启用远程JMX连接

在使用JConsole监视Tomcat服务器之前,需要为JMX启用远程连接。 JConsole可能会消耗大量系统资源,因此Oracle 建议仅通过连接到远程主机,将JConsole与正在监视的服务器隔离。 请注意,启用远程JMX访问需要适当的安全预防措施,因为JMX提供有限制的访问控制。 为了演示的方便,我们禁用SSL。

首先,在Tomcat的**/ bin目录中创建一个setenv.sh**文件,并包含以下内容:

export JAVA_OPTS=“ J A V A O P T S − D c o m . s u n . m a n a g e m e n t . j m x r e m o t e " e x p o r t J A V A O P T S = " {JAVA_OPTS} -Dcom.sun.management.jmxremote" export JAVA_OPTS=" JAVAOPTSDcom.sun.management.jmxremote"exportJAVAOPTS="{JAVA_OPTS} -Dcom.sun.management.jmxremote.port=” export JAVA_OPTS=“ J A V A O P T S − D j a v a . r m i . s e r v e r . h o s t n a m e = < T O M C A T H O S T O R I P > " e x p o r t J A V A O P T S = " {JAVA_OPTS} -Djava.rmi.server.hostname=<TOMCAT_HOST_OR_IP>" export JAVA_OPTS=" JAVAOPTSDjava.rmi.server.hostname=<TOMCATHOSTORIP>"exportJAVAOPTS="{JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false” export JAVA_OPTS=" J A V A O P T S − D c o m . s u n . m a n a g e m e n t . j m x r e m o t e . a u t h e n t i c a t e = t r u e " e x p o r t J A V A O P T S = " {JAVA_OPTS} -Dcom.sun.management.jmxremote.authenticate=true" export JAVA_OPTS=" JAVAOPTSDcom.sun.management.jmxremote.authenticate=true"exportJAVAOPTS="{JAVA_OPTS} -Dcom.sun.management.jmxremote.access.file= C A T A L I N A B A S E / c o n f / j m x r e m o t e . a c c e s s e x p o r t J A V A O P T S = " {CATALINA_BASE}/conf/jmxremote.access export JAVA_OPTS=" CATALINABASE/conf/jmxremote.accessexportJAVAOPTS="{JAVA_OPTS} -Dcom.sun.management.jmxremote.password.file=${CATALINA_BASE}/conf/jmxremote.password

这将设置JConsole可用于远程连接到Tomcat服务器的主机名和端口。 您可以指定任何主机名和未使用的端口。 虽然此示例不包含SSL,但它确实启用了密码验证,并指定了在何处查找访问(用户名)和密码文件; 如果它们尚不存在,您可能需要创建它们。 您可以通过编辑**$ {CATALINA_BASE} /conf/jmxremote.access**文件来添加新用户并为他们提供两种权限之一( readonlyreadwrite ):

tomcatUserRead readonly
tomcatUserWrite readwrite

第一行授予tomcatUserRead用户readonly权限,这意味着该用户可以查看MBean属性并接收通知。

第二行tomcatUserWrite用户提供了readwrite权限,允许该用户添加和删除MBean,设置属性和运行操作。

接下来,在**$ {CATALINA_BASE} /conf/jmxremote.password**文件中为这些用户设置密码:

tomcatRead tomcatWrite

保存文件并重新启动Tomcat服务器。 接下来,打开JConsole并运行以下命令,确保包含您在setenv.sh文件中定义的主机和端口:

jconsole <TOMCAT_HOST_OR_IP>:

这将打开JConsole界面,您可以在其中开始查看与JVM和Tomcat服务器相关的数据。

使用JConsole

JConsole是JDK附带的图形界面。 JConsole提供了一种更直观的方式来监视关键JVM指标,如堆内存使用情况,线程使用情况和CPU使用情况。 而不是通过有限的接口(如JMX代理)查询数据,您可以使用JConsole快速查看多个指标的数据,并深入查看Tomcat的Catalina和JVM的java.lang域的特定MBean类型和属性。 您可以导航到六个不同的选项卡:概览,内存,线程,类,VM摘要和MBean。 每个选项卡都提供一个下拉菜单,使您可以查看作用于不同时间范围的数据,例如最近五分钟,过去一个月或从服务器开始(在下拉列表中显示为“全部”选项)。

概览

JConsole的Overview选项卡显示了与JVM的内存使用情况,线程数,应用程序加载的Java类以及CPU使用率相关的信息,因此您可以一目了然地监视虚拟机的运行状况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

VM摘要

在“VM摘要”选项卡中,您可以查看有关JVM体系结构及其特征的更多详细信息。 如果您需要快速查看系统级属性或JVM配置设置,这将非常有用。 这包括您在Tomcat的**/bin/setenv.sh**配置文件中指定的任何参数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内存

在“内存”选项卡下,您可以查看有关虚拟机堆和非堆内存使用情况的更详细统计信息,以及有关内存池的数据。 在此选项卡中,您可以单击“执行GC”以运行垃圾回收,就像在Tomcat管理器中一样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果需要查看与特定内存池相关的数据,可以从“内存”选项卡左上角的“图表”下拉列表中选择该数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线程

JConsole的“线程”选项卡提供有关可用JVM线程的更多详细信息以及对死锁线程的检查。 “线程”列表显示线程名称,状态(类似于您在Tomcat的服务器状态页面上看到的线程“阶段”),以及每个可用线程的堆栈跟踪。 死锁检查对于查找可能导致应用程序挂起的线程非常有用。 如果找到任何死锁线程,您将看到一个新的死锁选项卡,其中包含有关导致死锁的更多信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MBean

要查看与您正在监视的Tomcat指标相关的实时数据,您可以在MBeans选项卡下查看Catalinajava.lang域,并深入查看特定属性。 与Tomcat Manager一样,JConsole从MBean服务器收集数据,但提供了一个更简单的界面来查找所需的指标。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JConsole提供了JVM和MBean数据的完美摘要,它使您能够绘制JVM数据图形,以可视化资源使用趋势。

自定义Tomcat访问和服务器日志

默认情况下,Tomcat访问日志使用公共日志格式 ,并记录服务器处理的所有请求。 您可以在Tomcat的conf / server.xml配置文件中查看访问日志中包含的内容:

<Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs” prefix=“localhost_access_log” suffix=“.txt” pattern=“%h %l %u %t “%r” %s %b” />

Valve元素的pattern属性指定应包含在每个日志条目中的每个请求(及其响应)的信息:

  • 发出请求的客户端的主机名或IP地址( %h
  • 来自identd服务的用户名(总是返回’ - ')( %l
  • 经过身份验证的用户名(返回-如果未使用)( %u
  • 请求的日期和时间( %t
  • 请求方法和URI( %r
  • 响应的HTTP状态代码( %s
  • 返回给客户端的对象大小,以字节为单位( %b

上面示例中使用的模式将按以下格式记录请求:

192.168.33.1 - - [21/Sep/2018:16:51:59 +0000] “GET /sample/ HTTP/1.1” 403 1145

Tomcat默认也会生成服务器日志,并使用java.util.logging 包来实现 。 服务器日志显示与Tomcat JVM和Catalina服务器相关的信息,包括内存不足(OOM)错误和部署活动,如下例所示:

16-Oct-2018 18:37:08.624 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina] 16-Oct-2018 18:37:08.625 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.10 16-Oct-2018 18:37:08.629 SEVERE [main] org.apache.catalina.startup.HostConfig.beforeStart Unable to create directory for deployment: [/opt/tomcat/conf/Catalina/localhost] 16-Oct-2018 18:37:08.672 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat/webapps/sample.war] 16-Oct-2018 18:37:09.341 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/opt/tomcat/webapps/sample.war] has finished in [667] ms

Tomcat将服务器日志写入控制台和Catalina日志文件(例如, catalina.2018-07-03.log)。 您可以自定义Tomcat应记录的信息类型,例如Tomcat日志记录属性文件( conf / logging.properties )中的最小日志级别,输出目录和输出格式。

处理程序是处理传入日志消息并格式化其输出的Java组件,使用格式化程序记录到文件( FileHandler )或控制台( ConsoleHandler )。 Tomcat的日志记录属性文件包括Catalina服务器,Tomcat Manager和已部署的Web应用程序日志的配置:

############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 2localhost.org.apache.juli.FileHandler.level = FINE 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.FileHandler.prefix = localhost. 3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.FileHandler.prefix = manager. 3manager.org.apache.juli.FileHandler.bufferSize = 16384 java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \ 2localhost.org.apache.juli.FileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = \ 3manager.org.apache.juli.FileHandler

默认情况下,Tomcat为其处理程序( FINE )和工具( INFO )设置两个不同的日志级别。 FINE日志级别包括有关服务器活动的详细信息, INFO级别记录更高级别的信息性消息。 处理程序属性整体管理Tomcat日志,而工具属性使您可以管理每个已部署应用程序的配置,包括Tomcat Manager。 例如,要调整Tomcat Manager的日志级别,可以编辑以下处理程序和工具属性:

3manager.org.apache.juli.FileHandler.level = FINE 3manager.org.apache.juli.FileHandler.directory = ${catalina.

总结

通过设置一些简单权限,您可以立即开始使用Tomcat Manager查看Tomcat和JVM数据。 一旦为JMX启用了远程连接,就可以使用JConsole等工具通过简单的图形界面监控Tomcat数据。 Tomcat还在其访问和服务器日志中提供有关请求和服务器活动的基本诊断信息。
.

总结

通过设置一些简单权限,您可以立即开始使用Tomcat Manager查看Tomcat和JVM数据。 一旦为JMX启用了远程连接,就可以使用JConsole等工具通过简单的图形界面监控Tomcat数据。 Tomcat还在其访问和服务器日志中提供有关请求和服务器活动的基本诊断信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值