如何去管理Application
介绍:
在很多的生产环境中,在不关闭容器的情况下,能够部署新的WEB App 或者取消现在的app 应用程序非常具有使用场景;或者使得容器中的应用重启;
为了支持中国功能 tomcat的内置的一个web应用 mananger
- 从 WAR 文件的上传内容部署新的 Web 应用程序。
- 从服务器文件系统在指定的上下文路径上部署新的 Web 应用程序。
- 列出当前部署的 Web 应用程序,以及这些 Web 应用程序当前处于活动状态的会话。
- 重新加载现有的 Web 应用程序,以反映
/WEB-INF/classes
或内容的更改/WEB-INF/lib
。 - 列出 OS 和 JVM 属性值。
- 列出可用的全局 JNDI 资源,以用于准备
<ResourceLink>
嵌套在<Context>
部署描述中的元素的部署工具。 - 启动已停止的应用程序(从而使其再次可用)。
- 停止现有应用程序(使其变得不可用),但不要取消部署它。
- 取消部署已部署的 Web 应用程序并删除其文档基础目录(除非它是从文件系统部署的)
一般使用manager web 的方式是 直接访问 http://localhost:8080/manager/html
。
相关的配置
需要配置一个配置文件 CATALINA_BASE/conf/tomcat-users.xml
配置用户的时候需要了解一下与之对应得角色权限
- manager-gui — 访问 HTML 界面。
- manager-status — 仅访问“服务器状态”页面。
- manager-script — 访问本文档中描述的工具友好的纯文本界面,以及“服务器状态”页面。
- manager-jmx — 访问 JMX 代理接口和“服务器状态”页面。
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
<user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
<user username="role1" password="<must-be-changed>" roles="role1"/>
-->
<role rolename ="manager-gui" />
<user username="tomcat" password="tomcat" roles="manager-gui"/>
<user username="tomcat2" password="tomcat" roles="manager-gui"/>
页面访问
manager-gui 配置的权限就可以 如上面的 tomcat2
浏览器命令访问
权限配置
<role rolename ="manager-gui" />
<role rolename ="manager-script" />
<role rolename ="manager-jmx" />
<user username="tomcat6" password="tomcat" roles="manager-gui,manager-script,manager-jmx"/>
命令示例
远程部署新的应用程序存档 (WAR)
http://localhost:8080/manager/text/deploy?path=/foo
上传这个HTTP PUT请求中指定为请求数据的Web应用归档(WAR)文件,安装到appBase
我们对应的虚拟主机的目录下,然后启动,appBase
从指定路径导出添加到的WAR文件的名称. 稍后可以使用该/undeploy
命令取消部署该应用程序(并删除相应的 WAR 文件)
常用命令
list:列出所有当前部署的 Web 应用程序的上下文路径、当前状态(running
或 stopped
)和活动会话数。启动 Tomcat 后的典型响应可能如下所示
reload: 重新加载现有应用程序
serverinfo: 列出有关 Tomcat 版本、操作系统和 JVM 属性的信息。
resources[?type=xxxxx]:全局可用jndi 资源
sessions?path=/examples : Web 应用程序的默认会话超时,以及当前处于其实际超时时间一分钟范围内的活动会话的数量
/examples&idle=num 显示会话统计信息(如上述/sessions
命令)并使空闲时间超过num
分钟的会话过期。要使所有会话过期,请使用&idle=0
.
start?path=/examples 通知已停止的应用程序重新启动,并使其再次可用。停止和启动非常有用,例如,如果您的应用程序所需的数据库暂时不可用。通常最好停止依赖此数据库的 Web 应用程序,而不是让用户不断遇到数据库异常。
stop?path=/examples 通知现有应用程序使其自身不可用,但仍保持部署状态。应用程序停止时传入的任何请求都将看到 HTTP 错误 404,并且此应用程序将在列表应用程序命令中显示为“已停止”。
undeploy?path=/examples 取消部署现有应用程序
警告- 此命令将删除appBase此虚拟主机的目录(通常为“webapps”)中存在的任何 Web 应用程序工件。这将删除应用程序 .WAR(如果存在)、由解压形式的部署或 .WAR 扩展产生的应用程序目录以及来自$CATALINA_BASE/conf/[enginename]/[hostname]/
目录的 XML 上下文定义 。如果您只是想让应用程序停止服务,则应改用该/stop
命令。
通知现有应用程序正常关闭自身,并将其从 Tomcat 中删除(这也使此上下文路径可用于以后重用)。此外,如果appBase
此虚拟主机的目录(通常为“webapps”)中存在文档根目录,则会删除该文档根目录。该命令与该命令在逻辑上相反 /deploy
findleaks[?statusLine=[true|false]] 查找内存泄漏。
threaddump 线程转储
vminfo 虚拟机信息
服务器状态
http://localhost:8080/manager/status
http://localhost:8080/manager/status/all
权限 :任何一个manager-xxx角色都允许访问此页面。
首先,您有服务器和 JVM 版本号、JVM 提供程序、操作系统名称和编号,后跟架构类型。
其次,有关于JVM内存使用情况的信息。
然后是有关 Tomcat AJP 和 HTTP 连接器的信息。他们都可以获得相同的信息:
- 线程信息:最大线程数、最小和最大空闲线程数、当前线程数和当前线程忙。
- 请求信息:最大处理时间和处理时间、请求和错误计数、接收和发送的字节数。
- 显示阶段、时间、发送的字节数、接收的字节数、客户端、VHost 和请求的表格。表中列出了所有现有线程。以下是可能的线程阶段列表:
- “解析并准备请求”:正在解析请求标头或正在为读取请求正文(如果已指定传输编码)进行必要的准备工作。
- “Service”:线程正在处理请求并生成响应。此阶段在“解析和准备请求”阶段之后,并在“完成”阶段之前。在这个阶段(服务器状态页面)总是至少有一个线程。
- “Finishing”:请求处理结束。仍在输出缓冲区中的任何剩余响应都将发送到客户端。此阶段之后是“Keep-Alive”(如果保持连接有效)或“Ready”(如果“Keep-Alive”不合适)。
- “Keep-Alive”:线程保持对客户端的连接打开,以防客户端发送另一个请求。如果收到另一个请求,下一阶段将是“解析和准备请求”。如果在保持活动超时之前没有收到请求,连接将被关闭,下一阶段将“就绪”。
- “Ready”:线程处于静止状态,可以使用。
如果您使用/status/all
命令,将提供有关每个已部署 Web 应用程序的附加信息。
使用 JMX 代理 Servlet
简介:JMX Proxy Servlet 是一个轻量级代理,用于获取和设置 tomcat 内部结构。(或任何已通过 MBean (tomcat 的许多组件都是注册)公开的类)它的使用不是非常用户友好,但 UI 对于集成命令行脚本以监视和更改 tomcat 的内部结构非常有帮助。您可以使用代理做两件事:获取信息和设置信息。要真正了解JMX Proxy Servlet,您应该对JMX 有一个大致的了解。
大致了解
**JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架 JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等 **
我的理解就是 Tomcat 的许多核心主键都是Mbean 然后我们在使用tomcat的过程中,可以通过JMX 来获取组件的各种参数,已经对参数的获取或者设置。
jmx 获取参数命令
http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
您必须提供以下参数:
get
: 完整的 bean 名称att
: 你想要获取的属性key
:(可选)CompositeData MBean 属性的键
jmx 设置参数命令
http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
所以你需要提供3个请求参数:
set
: 完整的 bean 名称att
: 你想改变的属性val
: 新值