vlambda博客
学习文章列表

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

Chapter 8. Monitoring and Management of Tomcat 7

监控在 IT 管理员的生活中起着至关重要的作用。它使网络/基础设施工程师的生活变得可预测。当我开始我的 Web 基础架构支持职业生涯时,我一直想知道,我的老板如何知道某个进程 90% 用于特定系统,或者他如何知道某个特定进程将在大约 90 分钟后终止,而无需记录进入应用程序?后来我发现他们使用市面上的各种第三方工具搭建了一个监控系统,用于服务器和应用监控。

在本章中,我们将讨论:

  • 如何监控Tomcat 7

  • 使用 Tomcat 管理器管理应用程序

  • 用于监控 Tomcat 7 的第三方实用程序

在我们学习如何监控 Tomcat 7 之前,让我们了解为什么任何系统实际上都需要监控,因为我们已经为用户很好地配置了系统。

这个问题的答案非常棘手。在实时环境中,系统可能由于网络故障、突然的 CPU 峰值、JVM 崩溃等多种原因而崩溃。有一些创收的应用程序,例如,如果银行网站出现故障,那么就会有巨大的收入损失,而且除非用户开始抱怨这些问题,否则管理员也不会知道。这也会对业务产生不好的影响。如果在服务器上设置了监控系统,Web 管理员将收到一条通知,说明以下系统正在关闭,他/她将采取必要的措施来解决问题。因此,它最大限度地减少了对应用程序停机时间的影响。

Note

IT 管理员支持数千台服务器,几乎不可能每天验证系统。因此,监控非常有用。

Different ways of monitoring

在当今世界,随着基础设施的增加,管理员管理服务器变得非常困难。为了提前识别问题并最大限度地减少停机时间,系统上配置了监视器。我们可以根据基础架构要求,例如操作系统、Web、应用程序和数据库级别的服务器以及单个应用程序级别,在系统上配置多级监控。配置多级监控有不同的方法。下图显示了为任何基础架构配置监控的不同方法:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

对一个系统的监控主要可以通过以下三种方式进行:

  • 第三方工具

    • 监控设置是使用市场上存在的第三方工具配置的,例如 Wily、SiteScope、Nagios 等。

    • 此类监控工具用于企业基础架构设置,其中有 100 多台服务器具有不同的基础架构组件(域),例如 Web、应用程序、数据库、文件系统服务器等。

  • 脚本

    • 脚本用于监控,其中需要监控特定用例,例如在特定时间间隔内登录的用户数量或特定于应用程序的用户角色的结果。

    • 在大大小小的 IT 组织中随处使用。

  • 手动

    • 当任何应用程序的特定模块性能较慢时使用此过程。

    • 主要用于故障排除和系统数量少于三个的情况。

Different ways of monitoring


在当今世界,随着基础设施的增加,管理员管理服务器变得非常困难。为了提前识别问题并最大限度地减少停机时间,系统上配置了监视器。我们可以根据基础架构要求,例如操作系统、Web、应用程序和数据库级别的服务器以及单个应用程序级别,在系统上配置多级监控。配置多级监控有不同的方法。下图显示了为任何基础架构配置监控的不同方法:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

对一个系统的监控主要可以通过以下三种方式进行:

  • 第三方工具

    • 监控设置是使用市场上存在的第三方工具配置的,例如 Wily、SiteScope、Nagios 等。

    • 此类监控工具用于企业基础架构设置,其中有 100 多台服务器具有不同的基础架构组件(域),例如 Web、应用程序、数据库、文件系统服务器等。

  • 脚本

    • 脚本用于监控,其中需要监控特定用例,例如在特定时间间隔内登录的用户数量或特定于应用程序的用户角色的结果。

    • 在大大小小的 IT 组织中随处使用。

  • 手动

    • 当任何应用程序的特定模块性能较慢时使用此过程。

    • 主要用于故障排除和系统数量少于三个的情况。

Monitoring setup for a web application and database server


在上一节中,我们已经讨论了监视器的类型,但我们仍然不知道这些系统上配置了哪些监视器。让我们为不同的基础设施系统监视器准备一个表格,以及它们的配置原因。下表显示了通常为 Web 应用程序和数据库服务器配置的基本监视器:

被监控的组件

益处

网络服务器

应用服务器

数据库服务器

中央处理器

主动措施以识别系统问题

是的

是的

是的

物理内存 (RAM)

主动措施以识别系统问题

是的

是的

是的

虚拟机

主动措施以识别系统问题

不

是的

是的

HTTP 连接

帮助我们识别 Web 服务器的性能

是的

是(仅当 HTTP 服务正在运行时)

不

AJP 连接

帮助我们找出 Web/应用程序服务器的连接性

是的

是的

不

数据库连接数

帮助我们识别数据库服务器的性能

不

不

是的

连接空闲

帮助我们识别数据库服务器的问题

不

不

是的

磁盘空间

识别系统问题的主动措施(磁盘空间不足)

是的

是的

是的

日志中的错误代码

帮助我们识别系统上的潜在问题

不

是的

是的

Tomcat Manager in Tomcat 7


Tomcat Manager 是管理 Apache Tomcat 7 操作的默认工具。它为 IT 管理员提供了远程管理应用程序和监控系统的自由。以下是 Tomcat 管理器的优点:

  • 允许管理员进行远程部署、回滚、启动和停止功能。

  • 为应用程序和服务器提供详细的监控状态。

  • 管理员无需 24x7 全天候待在办公室。如果有任何问题,他/她可以登录到 Tomcat Manager 来解决问题。简而言之,我们可以说 Tomcat 的远程管理对管理员来说变得非常容易。

Note

不建议从 Internet 打开 Tomcat 管理器。如果您必须这样做,那么我们必须在 Tomcat 7 上实施强大的安全策略,或者我们可以配置虚拟专用网络(VPN) 供管理员使用。

执行以下步骤访问 Tomcat 管理器:

  1. 1. 您可以使用 URL http://localhost:8080/ 访问 Tomcat 管理器。以下屏幕截图显示了 Tomcat 7 的主页,其中突出显示了 Manager App。

  2. 2. 点击Manager App,会提示输入用户名和密码。提供 tomcat_user.xml中给出的凭证,其中 tomcat_user.xml可以在 TOMCAT_HOME中找到/CONF 。

    读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理
  3. 3. 显示 Tomcat 管理器控制台。如果您查看控制台,它会为您提供应用程序部署、服务器状态、诊断、服务器信息等的完整画面。以下屏幕截图显示了应用程序的状态以及在应用程序支持期间执行的不同部署相关任务:

    读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

以下屏幕截图显示了 Tomcat 7 管理器的其他功能,例如:

  • 部署新应用程序

  • 诊断(内存或连接泄漏)

  • 服务器信息

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

Monitoring in Tomcat 7


可以使用 Tomcat 管理器在 Tomcat 7 中进行监控。默认情况下,Tomcat 管理器提供服务器的状态以及请求及其状态的详细描述。在进行故障排除时,此信息对管理员非常有用。除此之外,管理员无需登录机器即可收集此信息。收集应用程序的全部信息至少需要 30 分钟,如果您手动检查服务器状态,但使用 Tomcat 管理器,您将使其在线。这对 IT 管理员来说真是太棒了,而且帮助很大。

让我们讨论 Tomcat 管理器中可用的各种用于监视的组件。

Summary of the Server Status of Tomcat 7

Tomcat 7 的基本概要包括 JVM、HTTP 和 HTTPS 连接的详细信息,可以使用 URL http://localhost:8080/manager/status 访问.以下屏幕截图显示了 Tomcat 7 的概要:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

显示的 Tomcat 7 概要包含 JVM、HTTP 连接和 AJP 连接摘要的详细信息。每个组件的输出摘要详细信息如下:

  • 虚拟机

    • 可用内存

    • 已用内存

    • 总内存

  • HTTP 端口上的连接

    • 最大线程数

    • 当前线程数

    • 当前线程忙

    • 最大处理时间(毫秒)

    • 处理时间 (s)

    • 请求数

    • 错误计数

    • 收到的字节数 (MB)

    • 发送的字节数 (MB)

  • AJP 上的连接

    • 最大线程数

    • 当前线程数

    • 当前线程忙

    • 最大处理时间(毫秒)

    • 处理时间 (s)

    • 请求数

    • 错误计数

    • 收到的字节数 (MB)

    • 发送的字节数 (MB)

Complete Server Status of Tomcat 7

此页面提供了 Tomcat 7 状态的完整报告。它包括属于服务器状态的所有参数。除此之外,它还显示详细的应用程序列表、应用程序响应时间、servlet 响应时间等。可以使用 URL http://localhost:8080/manager/status/all 访问它。让我们简要讨论仪表板的每个组件。

Application List

这为我们提供了 Tomcat 7 中托管的所有应用程序的列表以及它们用于应用程序访问的 URL 映射。以下屏幕截图显示了 Tomcat 7 实例中的应用程序列表部署:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

以下几点给出了托管在 Tomcat 中的应用程序的详细信息:

  • 应用详情:点击应用列表后,它会显示应用的完整摘要,包括其内部部署组件。以下屏幕截图显示了内部组件及其状态,例如应用程序响应、servlet 响应和 JSP 响应的状态:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理
  • 应用程序响应: 已部署应用程序的应用程序响应为我们提供了应用程序的当前状态。例如,上一个屏幕截图显示了参考示例应用程序当前行为的以下参数:

    • 开始时间

    • 启动时间(毫秒)

    • TLD 扫描时间(毫秒)

    • 活动会话

    • 会话数

    • 最大活跃会话数

    • 拒绝的会话创建

    • 过期会话

    • 最长会话存活时间 (s)

    • 平均会话存活时间 (s)

    • 处理时间(毫秒)

    • 已加载 JSP

    • JSP 重新加载

  • Servlet 详细信息: 在此部分中,仪表板显示为示例应用程序部署的 servlet 的响应时间,参数如下:

    • 处理时间 (s)

    • 最长时间(毫秒)

    • 请求数

    • 错误计数

    • 加载时间(毫秒)

    • 类加载时间(毫秒)

  • JSP: 在本节中,仪表板显示为示例应用程序部署的 JSP 的响应时间,参数如下:

    • 处理时间 (s)

    • 最长时间(毫秒)

    • 请求数

    • 错误计数

    • 加载时间(毫秒)

    • 类加载时间(毫秒)

JVM

在此部分中,仪表板显示 Tomcat 实例的 JVM 内存利用率。以下屏幕截图中的第一列显示了具有以下参数的示例应用程序的 JVM 内存利用率:

  • 可用内存

  • 已用内存

  • 总内存

Connections on the HTTP port (8080)

在此部分中,仪表板显示 Tomcat 实例的 HTTP 连接状态。以下屏幕截图中的第二列显示了具有以下参数的应用程序示例的 HTTP 连接状态:

  • 最大线程数

  • 当前线程数

  • 当前线程忙

  • 最大处理时间(毫秒)

  • 处理时间 (s)

  • 请求数

  • 错误计数

  • 收到的字节数 (MB)

  • 发送的字节数 (MB)

Connections on the AJP

在此部分中,仪表板显示 Tomcat 实例的 AJP 连接状态。以下屏幕截图中的第三列显示了具有以下参数的应用程序示例的 AJP 连接状态:

  • 最大线程数

  • 当前线程数

  • 当前线程忙

  • 最大处理时间(毫秒)

  • 处理时间 (s)

  • 请求数

  • 错误计数

  • 收到的字节数 (MB)

  • 发送的字节数 (MB)

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

JConsole configuration on Tomcat 7


JConsole 是 JDK 1.5 或更高版本附带的最佳监控实用程序之一。 JConsole 的完整形式是 Java 监控和管理控制台。它是一个图形工具,可提供应用程序和服务器性能的完整详细信息。它为我们提供了有关托管在 Tomcat 7 中的应用程序的以下信息:

  • 检测内存不足

  • 启用或禁用 GC 和类加载详细跟踪

  • 检测死锁

  • 控制应用程序中任何记录器的日志级别

  • 访问操作系统资源——Sun 的平台扩展

  • 管理应用程序的托管 Bean(MBean)

Remote JMX enabling

为了使用 JConsole 进行 Tomcat 7 监控,我们必须启用 Java 管理扩展 (JMX) 在 Tomcat 7 上。通过这样做,我们也可以从我们的台式机监控 Tomcat 7 服务器的详细信息,或者简单地说,我们可以在不登录服务器的情况下远程监控服务器状态机器。它为管理员提供了极大的灵活性,可以在任何位置工作并解决问题。为了在 Tomcat 7 中启用它,我们必须在 catalina.sh 中添加 CATALINA_OPTS 参数。默认情况下,添加以下值以启用详细信息:

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

下面我们在Tomcat 7上做实时配置,了解一下各个参数的含义:

CATALINA_OPTS="-Djava.awt.headless=true -Xmx128M -server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote. port=8086 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
  • -Djava.awt.headless: 是一个系统配置选项,帮助图形渲染程序接受图形控制台,并将程序重定向到命令行模式下工作。在连接到远程服务器时非常有用。

  • -Dcom.sun.management.jmxremote: 这个JMX允许主机连接到系统。

  • -Dcom.sun.management.jmxremote.port: 它定义了你的远程方法调用 (RMI) 已连接。

  • -Dcom.sun.management.jmxremote.authenticate: 定义连接的认证机制。

  • -Dcom.sun.management.jmxremote.ssl: 它定义了用于通信的协议。如果设置为 false,则默认使用HTTP协议。

How to connect to the JConsole

完成 Tomcat 7 配置后,就可以使用命令 jconsole 通过 JConsole 远程连接到 Tomcat 7,如下所示。它将打开 GUI 界面。我们必须提供我们要连接的服务器的 IP 地址和端口;在我们的例子中,它是 localhost 和 8086。以下屏幕截图显示了 JConsole 的默认控制台:

[root@localhost bin] # jconsole

Note

jconsole 可以在 JAVA_HOME/bin 中找到。

如果我们在路径中包含了 JAVA_HOME/bin,那么我们可以在系统的任何地方执行这个命令。

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

以下屏幕截图显示了使用端口 8086 连接到 Tomcat 7 的 JConsole:

Note

要连接到远程服务器,我们必须启用防火墙以允许服务器上的 JConsole 端口。

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

连接系统后,它会提供系统的完整概览,例如 CPU、内存、线程和类。以下屏幕截图显示了详细信息。我们还可以对基于 Java 的应用程序的以下组件进行深入分析:

  • 记忆

  • 线

  • 课程

  • MBean

使用此工具的优点是:

  • 申请在线分析

  • 用于分析的定制报告

  • 可以在系统中检索死锁

Different tabs for the JConsole and their features

我们现在将讨论 JConsole 的不同监控组件。

Memory overview

Web 管理员有必要分析 Tomcat 7 的内存状态,以避免服务器将来出现问题。以下屏幕截图显示了 Tomcat 7 的实时堆内存利用率。此选项卡提供以下功能:

  • 内存及其 JVM 足迹的图形表示

  • 基于需求分析的内存图定制

  • 执行 GC 的能力

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

Threads overview

此选项卡为特定实例提供了 Tomcat 7 中托管的服务器线程和 Web 应用程序的完整图片。以下屏幕截图显示了线程利用率的实时状态,并且突出显示了死锁检测按钮。实时,这个线程分析工具对于管理员来说是一个非常方便的工具。以下是线程选项卡提供的功能:

  • 线程及其图片的图形表示

  • 单个线程分析及其状态

  • 死锁检测

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

VM Summary and Overview

这两个选项卡对于管理员来说非常重要。实际上,管理员不可能每次都查看应用程序的每个组件。管理员所做的是,他/她检查系统的整体性能。如果发现任何异常,他们将向下钻取组件。以下是这些选项卡的功能:

  • 实例的完整摘要(堆内存使用情况、线程、CPU 使用情况、类)

  • VM 参数摘要

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

上一个屏幕截图显示了 Tomcat 7 的实时状态。它由四个图表组成,显示 Tomcat 7 实例的堆、线程、类和 CPU 使用率的实时利用率。另一方面,以下屏幕截图显示了 Tomcat 实例的完整摘要:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

MBeans

此选项卡为您提供托管 Beans(MBeans) 部署在 Tomcat 实例中。它包括 Tomcat 和应用程序级 MBean。以下屏幕截图显示了 MBean 的属性。如果某个特定的 MBean 是问题的根源,这将非常有用。以下是 MBeans选项卡的优点:

  • 一个选项卡中使用的所有参数

  • 易于部署、回滚和调用

  • 我们可以使用 MBeans 在数据库级别创建用户

  • 我们可以使用 MBean 为事件创建通知

  • 资源配置可以动态完成

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理
Types of MBeans

有四种类型的 MBean。下图显示了不同类型的 MBean。让我们简要讨论每个 MBean:

  • 标准 MBean: 标准 MBean 是 MBean 接口和类的组合,其中接口定义了整个属性和操作列表,而类为远程接口提供通信功能。它是最简单的 MBean 之一。

  • 动态 MBeans: 动态 MBean 实现了一个单独的接口(一个特定的方法)并且可以在运行时调用。

  • Open MBeans:它是动态 MBeans 和用于可管理性的通用数据集的组合。

  • Model MBeans:它是动态MBeans的组合,可以在运行时完全访问可配置的参数和自描述的方法。此 MBean 需要类。

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

让我们以部署在 Tomcat 7 中的连接器为例,我们可以在其中使用 MBean 远程配置和执行连接器上的操作。默认情况下,已配置 HTTP 和 AJP 连接器。在我们的示例中,我们还配置了 HTTPS 连接器。以下屏幕截图显示了三个连接器 HTTP、AJP 和 HTTPS:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理

如果我们观察 Connector 文件夹,我们可以查看每个 Connector 的三个子级别。以下是各部分的功能:

  • 属性: 本节包含有关Tomcat实例启动期间加载到内存中的不同参数的信息。简而言之,可以说配置参数的信息是在运行时加载的。

  • 操作:此模式的功能是为MBeans执行运行时操作。以下是我们可以执行的不同操作:

    • 破坏

    • 开始

    • 停止

    • 在里面

    • 恢复

    • 暂停

      以下屏幕截图显示了为 Tomcat 7 的 HTTP 连接器成功调用的暂停操作:

读书笔记《apache-tomcat-7-essentials》Tomcat 7的监控与管理
  • Nofitications: 用于配置MBeans状态、死锁等事件的通知。要启用通知,我们必须订阅它。

Summary


在本章中,我们讨论了 Tomcat 7 中的各种监控过程及其使用 Tomcat Manager 和 JConsole 的组件,例如不同的监控方式,在 Tomcat 7、JConsole 中如何进行监控以及如何使用它。在下一章中,我们将使用集群、负载平衡、高可用性概念、架构设计、可伸缩性等来讨论 Tomcat 7 的高可用性设置。