Tomcat Manager用来解决以下问题:
Tomcat Manager默认安装在上下文路径:/manager中,支持的功能有:
Tomcat默认安装中已经包含了Manager,若要将Manager应用的实例上下文添加到一个新的主机中,manager.xml上下文配置文件应该放在$CATALINA_BASE/conf/[enginename]/[hostname]文件夹中:
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1" />
</Context>
如果要将Tomcat配置成能够支持多个虚拟机(网站),需要对每个虚拟机配置一个Manager。
Manager应用的使用方式有:
localhost可以替换为主机名
):http://localhost:8080/manager/html
CATALINA_HOME(Tomcat的安装目录) Manager应用要求用户在使用之前验证自己的身份,提供用户名和密码,以及相应配置的manager-*角色。 默认用户文件($CATALINA_BASE/conf/tomcat-users.xml)中的用户名称都没有指定角色名称,所以默认不能访问Manager应用。
角色名称位于Manager应用的web.xml文件中,可用角色包括:
如何配置用户名和密码取决于Realm实现:
$CATALINA_BASE/conf/server.xml
文件中。MemoryUserDatabase和MemoryRealm会读取存储在$CATALINA_BASE/conf/tomcat-users.xml
文件——它可以用任何文本编辑器编辑——它为每个用户定义了一个XML格式的<user>
:<user username="username" password="password" roles="standard,manager-script>
除了用户名和密码,Manager可以配置RemoteAddrValve
和RemoteHostValve
两个参数,分别通过远程IP地址或者远程主机名来先追访问,详见valve文档,例如:
<Context privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1"/>
</Context>
Manager应用的HTML界面位于:
http://{host}:{port}/manager/html
被赋予manager-gui角色的用户才能访问这个页面。 详细介绍参考:HTML Manger 文档
Manager应用能够处理的命令都是通过下面的URL格式指定的:
http://{host}:{port}/manager/text/{command}?{parameter}
这些命令通常是被HTTP GET请求来执行的。
/deploy
命令有一种能被HTTP PUT请求执行的格式。
多数Manager 命令都能够接受一个或者多个查询参数:
/
即可。注意,无法对Manager应用本身执行管理命令 /deploy
命令有效,也是该命令所唯一能接受的格式JarURLConnection
类的任何有效语法。命令都会以text/plain
形式返回响应。
响应的第一行用OK或者FAIL开头,标明请求命令是否成功。
如果响应失败,响应第一行随后部分会带有遇到问题的描述。
http://localhost:8080/manager/text/deploy?path=/foo
将所谓请求参数数据指定在HTTP PUT请求中的web应用归档文件(war)上传,将它安装在相应主机中的appBase目录中,然后启动,将war文件名添加到上述路径的appBase中
可以通过/undeploy
命令取消对应用的部署,相应的应用目录也会被删除。
通过在/META-INF/context.xml中包含上下文配置XML文件,war文件能够包涵Tomcat特有的部署配置信息。
URL参数包括:
注意该命令和/undeploy
命令在逻辑上是对立的。
安装或者启动成功会得到响应:
OK - Deployed application at context path /foo
否则,响应以FAIL
开头,并包含错误信息。
部署并启动一个新的web应用,附加到指定的上下文path上(不能被其他web应用同时使用),该命令与/undeploy
逻辑对立。
该命令由一个HTTP GET命令执行。部署命令的方式有很多:
http://localhost:8080/manager/text/deploy?path=/footoo&tag=footag
用来部署之前曾经通过tag
属性部署过的web应用。
注意Manager应用的工作目录包含之前部署过的war文件:如果清除它将导致部署失败。
部署位于Tomcat服务器上的web应用或者war文件。如果没有指定上下文路径参数path
,就会把目录名或者不带.war后缀的war文件名当作路径来使用。war参数制定了目录或者war文件的URL(也包含file:格式)。引用WAR文件的URL所采用的语法详见java.net.JarURLConnection类的Java文档页面。
只使用引用了整个war文件的URL。
例一: web应用位于Tomcat服务器上的/path/to/foo目录中,被部署为上下文路径为/footoo的wen应用。
http://localhost:8080/manager/text/deploy?path=/footoo&war=file:/path/to/foo
例二: Tomcat服务器上的war文件/path/tp/bar.war被部署为上下文路径为/bar的web应用。注意,这里没有path参数,因此上下文路径默认没有war后缀的war文件名。
http://localhost:8080/manager/text/deploy?war=file:/path/to/bar.war
对于主机appBase目录中的web应用目录或者war文件进行部署,目录名或者没有war后缀名的war文件名被用作上下文路径名。 例一: web应用位于Tomcat服务器中主机appBase目录下名为foo的子目录中,被部署为路径名为/foo的web应用。注意用到的上下文路径就是web应用的目录名:
http://localhost:8080/manager/text/deploy?war=foo
例二: 位于主机appBase目录中的bar.war文件被部署为上下文名为/bar的web应用:
http://localhost:8080/manager/text/deploy?war=bar.war
<Context path="/foobar" docBase="/path/to/application/foobar">
</Context>
例一: 使用上下文配置.xml文件部署web应用:
http://localhost:8080/manager/text/deploy?config=file:/path/context.xml
例二: 使用上下文配置.xml文件和位于服务器中的web应用的war文件。
http://localhost:8080/manager/text/deploy
?config=file:/path/context.xml&war=file:/path/bar.war
安装和启动正常,响应为:
OK - Deployed application at context path /foo
否则,会返回以FAIL开头的错误信息:
http://localhost:8080/manager/text/list
列出当前所有部署的web应用的上下文路径,当前路径(running或stopped),以及活跃的会话。 初始Tomcat一般会产生如下响应:
OK - Listed applications for virtual host [localhost]
/:running:0:ROOT
/examples:running:0:examples
/host-manager:running:0:host-manager
/manager:running:0:manager
/docs:running:0:docs
http://localhost:8080/manager/text/reload?path=/examples
标记一个现有应用,关闭,并重新加载。使用情况为:当web应用上下文不能重新加载;已经更新了/WEB-INF/classes目录中的类和属性文件;或者在/WEB-INF/lib目录添加或更新了jar文件。
在重新加载时,web应用配置文件?WEB-INF/web.xml无法重新读区,如果对web.xml作出更改,必须重启web应用。
如果命令执行成功,响应为:
OK - Reloaded application at context path /examples
如果失败,回应以FAIL开头,并包含相关的错误信息,有以下几种:
http://localhost:8080/manager/text/serverinfo
列出Tomcat版本,操作系统,以及JVM信息:
OK - Server info
Tomcat Version: Apache Tomcat/9.0.5
OS Name: Mac OS X
OS Version: 10.13.3
OS Architecture: x86_64
JVM Version: 1.8.0_161-b12
JVM Vendor: Oracle Corporation
出现错误,响应以FAIL开头,并包含错误信息:
* Encountered exception
An exception was encountered trying to enumerate the system properties. Check the Tomcat logs for the details.
http://localhost:8080/manager/text/resources[?type=xxxxx]
列出上下文配置文件资源链接中所使用的全局JNDI资源。如果指定type请求参数,参数值必须是所需资源类型的完整Java类名(例如javax.sql.DataSource获取所有可用的JDBC数据资源的名称),如果没有指定type请求参数,则返回所有类型的资源。 根据是否制定了type请求参数,响应成功第一行为:
OK - Listed global resources of all types
或
OK - Listed global resources of type xxxxx
之后每个资源单列一行,字段由冒号分割:
<ResourceLink>
元素的global
属性中。出现错误,响应以FAIL开始,并包含一个错误消息:
http://localhost:8080/manager/text/sessions?path=/examples
显示Web应用默认的会话超时,和当前活跃会话在一分钟内实际的超时次数。
OK - Session information for application at context path /examples
Default maximum session inactive interval 30 minutes
<1 minutes: 1 sessions
1 - <2 minutes: 1 sessions
http://localhost:8080/manager/text/expire?path=/examples&idle=num
显示会话统计信息,以及超出nums所指定的分钟数的过期会话。想要使所有会话过期可以使用&idle=0
实际上,/sessions和/expire是同一个命令的两种异名,唯一不同的在于idle参数。
http://localhost:8080/manager/text/start?path=/examples
标记一个已停止的应用,重新开启它,使得它再次可用。 如果正常,得到如下类似响应:
OK - Started application at context path [/examples]
否则,返回以FAIL开头的错误响应,并包含错误类型。
标记一个现有应用,使其不可用,但是仍然处于已部署的状态。当应用停止时,任何请求都将得到HTTP 404. 如果命令执行成功,得到类似响应:
http://localhost:8080/manager/text/stop?path=/examples
否则,将得到以FAIL开头的错误信息。
http://localhost:8080/manager/text/undeploy?path=/examples
WARNING:该命令将会删除主机appBase(通常是webapps)中所有的Web应用。
功能:标记一个已由应用,将它关闭,并从Tomcat中移除,如果文档根目录位于appBase目录(通常是webapps)中,那么它会被删除。 如果命令执行成功,得到如下响应:
OK - Undeployed application at context path /examples
否则,得到以FAIL开头的异常。
http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]
寻找内存泄漏的诊断将触发一次彻底的垃圾回收(GC),因此如果在生产环境中使用它需要非常谨慎。 该命令将会试图从已导致内存泄漏的web应用(当其处于停止,重新加载,以及被取消部署状态时)。通常由一种分析器来确认结论。诊断使用了由StandardHost(标准主机)所提供的附加功能。如果使用的是没有扩展自StandardHost的主机,则诊断无法生效。
Java中显示出发彻底的垃圾回收是不可能的。如果需要确认诊断是否成功实现了彻底的垃圾回收,可以使用GC日志,JConsole分析器或者类似工具。
执行成功返回:
/leaking-webapp
如果需要在响应中看到状态行,那么要在请求中加入statusLine查询参数。并将其设定为true。 对于已经停止的,被重新加载或取消部署的web应用,由于之前运行所需要的类仍然加载在内存中,从而造成内存泄漏。响应将把这种应用的每个上下文路径都单列一行。如果应用被加载了数次,就有可能被列出来数次。 如果命令没有成功执行,返回以FAIL开头的错误信息。
http://localhost:8080/manager/text/sslConnectorCiphers
SSL连接器/加密诊断会列出当前每一个连接器所配置的SSL/TLS加密算法,对于BIO和NIO,将列出每个加密算法套件的名称,对于APR,将返回SSLCipherSuite的值。 响应成功得到:
OK - Connector / SSL Cipher information
Connector[HTTP/1.1-8080]
SSL is not enabled for this connector
Connector[HTTP/1.1-8443]
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
...
http://localhost:8080/manager/text/threaddump
编写JVM线程转存。 响应类似:
OK - JVM thread dump
2018-03-05 15:45:48.844
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.161-b12 mixed mode):
"ajp-nio-8009-exec-40" Id=106 cpu=148000 ns usr=65000 ns blocked 0 for -1 ms waited 1 for -1 ms
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- waiting on (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7b46e563)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
http://localhost:8080/manager/text/vminfo
写入一些关于Java虚拟机(VM)的诊断信息。 响应类似与:
OK - VM info
2018-03-05 16:07:42.660
Runtime information:
vmName: Java HotSpot(TM) 64-Bit Server VM
vmVersion: 25.161-b12
vmVendor: Oracle Corporation
specName: Java Virtual Machine Specification
specVersion: 1.8
specVendor: Oracle Corporation
managementSpecVersion: 1.2
name: 53022@pengjunzhes-MacBook-Pro.local
startTime: 1519977186974
uptime: 149383638
isBootClassPathSupported: true
...
http://localhost:8080/manager/text/save
如果不置顶任何参数,该命令将吧服务器的当前配置信息保存到server.xml中,已有的配置信息.xml将被重命名,作为必要时的配置文件。 如果制定了path参数,而且该参数与已配置应用的路径相匹配,那么该web应用的配置将被保存为一个命名恰当的上下文.xml文件中,位于当前主机的xmlBase中。 要是用该命令,则在StoreConfigMBean需要存在,通常用StoreConfigLifecycleListener. 配置。 命令执行失败会返回以FAIL开头的错误信息。
可从下面链接中观察有关服务器的状态信息,任何一个**manager-****角色都可以访问这一页面。 用HTML格式显示的服务器状态信息:
http://localhost:8080/manager/status
http://localhost:8080/manager/status/all
用XML格式显示服务器状态信息:
http://localhost:8080/manager/status?XML=true
http://localhost:8080/manager/status/all?XML=true
首先显示的是服务器和JVM版本号,JVM提供者,操作系统名称,版本号,系统体系结构类型等。 其次是JVM内存使用信息。 最后是关于Tomcat AJP和HTTP连接器的信息,对两者来说,这些信息很有用:
JMX代理Servlet是一款轻量级代理。 用来获取和设置信息。
JMX查询的命令格式:
http://webserver/manager/jmxproxy/?qry=STUFF
STUFF
是要执行的JMX查询,例如:
qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor
which will locate all workers which can process requests and report their state.
定位所有能够处理的请求并汇报各自状态。qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet
which return all loaded servlets.
查询返回所有加载的Servlet。qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue
which look for a specific MBean by the given name.
按照指定名称查找M Bean。通过get命令获取特性MBean的属性值:
http://webserver/manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
必须提供以下参数:
get
:M Bean的完整名称。att
:希望获取的属性。key
:(可选参数)CompositeData M Bean的属性中的键。http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
必须提供以下参数:
set
:完成的bean值。attr
:想要改变的属性。val
:新的属性值通过invoke命令,可以在M Bean中调用方法:
http://webserver/manager/jmxproxy/?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
例如,使用如下方法调用Service的findConnector()方法:
http://localhost:8080/manager/jmxproxy/?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
Tomcat为Ant构建工具准备了一套方便的任务定义,使用这些命令需要执行以下操作:
$ANT_HOME/bin
directory to your PATH
environment variable.manager-script
role.。。。