架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
这个界面只是简单的访问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="
JAVAOPTS−Dcom.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="
JAVAOPTS−Djava.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="
JAVAOPTS−Dcom.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**文件来添加新用户并为他们提供两种权限之一( readonly
和 readwrite
):
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选项卡下查看Catalina和java.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
最后
试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**