Tomcat 学习笔记(二)监控

一、tomcat 可监控的内容

 tomcat 通过 jmx 的形式对外提供 tomcat 的监控数据,比如:堆内存使用情况、线程使用情况等。一般通过 jdk 的工具 jconsole、jvisualvm 工具连接 在 tomcat 上开的 jmx 端口,可以界面化看到。监控数据项在 tomcat 本身是通过 Mbean 提供的,要想知道 tomcat 有哪些 Mbean,可以使用 jconsole 进行查看,该工具默认就有 Mbean 这个 tab。

 监控项类别 监控项  说明
 Catalina:type=Connector,port=<端口>  URIEncoding 编码方式,默认 UTF-8
acceptCount 可以建立的最大 tcp 连接数
address  
ajpFlush  
allowTrace  
allowedRequestAttributesPattern  
ciphers  
ciphersUsed  
className  
connectionLinger  
enableLookups  
connectionTimeout tcp 连接建立超时时间
executorName  
keepAliveTimeout 连接 keepalived 超时时间
localPort tomcat 启动端口
maxHeaderCount  
maxKeepAliveRequests  
maxParameterCount  
maxPostSize  
maxSavePostSize  
maxSwallowSize  
maxThreads 最大http并发请求数
minSpareThreads 允许的最小http空闲请求线程数
modelerType  
packetSize  
port  
processorCache  
protocol  http 请求所使用的协议
protocolHandlerClassName  
proxyName  
proxyPort  
redirectPort 默认是 8443
scheme 默认是 http
secret  
secretRequired  
secure  
sslProtocols  
stateName  
tcpNoDelay  
threadPriority  
useBodyEncodingForURI  
useIPVHosts  
xpoweredBy  

Catalina:type=GlobalRequestProcessor,name="http-nio-<端口>"

在代码中Mbean 获取时,可以配置 Catalina:type=GlobalRequestProcessor,name="*"

bytesReceived  
bytesSent  
errorCount 从tomcat启动以来 ,其处理的请求失败的个数
maxTime 从tomcat启动以来 ,处理的请求中耗时最长的时间
modelerType  
processingTime 从tomcat 启动以来,处理请求所耗费的总时长

Catalina:type=Host,host=localhost

(localhost的信息,一般是在server.xml 中 host (localhost)的静态配置信息)

aliases  
appBase war包所在父目录,默认为 webapps
autoDeploy boolean 值,是否自动加载
backgroundProcessorDelay  
children 部署在 appBase下的war包列表
configClass  
contextClass  
copyXML  
createDirs  
deployIgnore  
deployXML  
errorReportValveClass  
modelerType  
name  
startChildren  
startStopThreads  
stateName 运行状态
undeployOldVersions  
unpackWARs 布尔值,是否自动解压war包
valveNames  
workDir  
xmlBase  
Catalina:type=ProtocolHandler,port=8080 acceptCount  
acceptorThreadCount  
acceptorThreadPriority  
algorithm  
allowHostHeaderMismatch  
allowedTrailerHeaders  
aprRequired  
backlog  
ciphers  
clientAuth  
clientCertProvider  
compressableMimeType  
compressableMimeTypes  
compressibleMimeType  
compressibleMimeTypes  
compression  
compressionMinSize  
connectionCount  
connectionLinger  
connectionTimeout  
connectionUploadTimeout  
continueResponseTiming  
crlFile  
defaultSSLHostConfigName  
disableUploadTimeout  
domain  
globalRequestProcessorMBeanName  
keepAliveTimeout  
keyAlias  
keyPass  
keystoreFile  
keystorePass  
keystoreProvider  
keystoreType  
localPort  
maxConnections  
maxExtensionSize  
maxHeaderCount  
maxHttpHeaderSize  
maxKeepAliveRequests  
maxSavePostSize  
maxSwallowSize  
maxThreads  
maxTrailerSize  
minSpareThreads  
modelerType  
name  
nameIndex  
noCompressionStrongETag  
noCompressionUserAgents  
objectName  
pollerThreadCount  
pollerThreadPriority  
port  
processorCache  
rejectIllegalHeader  
rejectIllegalHeaderName  
relaxedPathChars  
relaxedQueryChars  
restrictedUserAgents  
sSLCACertificateFile  
sSLCACertificatePath  
sSLCARevocationFile  
sSLCARevocationPath  
sSLCertificateChainFile  
sSLCertificateFile  
sSLCertificateKeyFile  
sSLCipherSuite  
sSLDisableCompression  
sSLDisableSessionTickets  
sSLEnabled  
sSLHonorCipherOrder  
sSLPassword  
sSLProtocol  
sSLVerifyClient  
sSLVerifyDepth  
secure  
selectorTimeout  
sendReasonPhrase  
sendfileSupported  
server  
serverRemoveAppProvidedValues  
sessionCacheSize  
sessionTimeout  
sniParseLimit  
soLinger  
soTimeout  
sslEnabledProtocols  
sslImplementationName  
sslProtocol  
tcpNoDelay  
threadPriority  
trustManagerClassName  
trustMaxCertLength  
truststoreAlgorithm  
truststoreFile  
truststorePass  
truststoreProvider  
truststoreType  
useKeepAliveResponseHeader  
useSendfile  
useServerCipherSuitesOrder  
waitingProcessorCount  

Catalina:type=Server

(tomcat 本身信息)

address  
serverBuilt tomcat 被编译的版本
serverInfo tomcat 名称
serverNumber  
serviceNames  
shutdown  
stateName 运行状态
Catalina:type=SocketProperties,name="http-nio-<端口>"       appReadBufSize  
 appWriteBufSize  
 bufferPool  
 bufferPoolSize  
 directBuffer  
 directBufferPool  
directSslBuffer  
eventCache  
processorCache  
soLingerOn  
soLingerTime  
soTimeout  
tcpNoDelay  
timeoutInterval  
unlockTimeout  
Catalina:type=StringCache accessCount  
byteEnabled  
cacheSize  
charEnabled  
hitCount  
trainThreshold  

Catalina:type=ThreadPool,name="http-nio-<端口>"

(Catalina:type=ThreadPool,name=*)

acceptCount  
acceptorThreadCount  
acceptorThreadPriority  
alpnSupported  
bindOnInit  
connectionCount 连接数
connectionLinger  
connectionTimeout 连接超时时间
currentThreadCount 当前线程池中总共可用线程数
currentThreadsBusy 当前并发正在处理的请求数
daemon 默认 true
executorTerminationTimeoutMillis  
keepAliveCount  
keepAliveTimeout  
localPort  
maxConnections 最大连接数
maxKeepAliveRequests  
maxThreads 最大可并发处理的请求数
minSpareThreads  
pollerThreadCount  
pollerThreadPriority  
port  tomcat 启动端口
running  
sSLEnabled  
selectorTimeout  
sniParseLimit  
sslImplementation  
sslImplementationName  
tcpNoDelay  
threadPriority  
useInheritedChannel  
useSendfile  
java.lang:name=G1 Old Generation,type=GarbageCollector CollectionCount 从 tomcat 启动到目前为止,垃圾回收的次数
CollectionTime 从 tomcat 启动到目前为止,垃圾回收总共耗时时间
LastGcInfo  
MemoryPoolNames  
Name  
Valid  
java.lang:name=G1 Young Generation,type=GarbageCollector 监控项同 “java.lang:name=G1 Old Generation,type=GarbageCollector”
java.lang:type=Memory HeapMemoryUsage 堆内存使用情况
NonHeapMemoryUsage 非内存使用情况
java.lang:type=MemoryPool,name=CodeHeap 'non-nmethods' PeakUsage  
Usage  
UsageThreshold  
UsageThresholdCount  
UsageThresholdExceeded  
UsageThresholdSupported  
Type NON_HEAP  : 非堆
java.lang:type=MemoryPool,name=CodeHeap 'non-profiled nmethods' 同 “java.lang:type=MemoryPool,name=CodeHeap 'non-nmethods'”
java.lang:type=MemoryPool,name=CodeHeap 'profiled nmethods' 同 “java.lang:type=MemoryPool,name=CodeHeap 'non-nmethods'”
java.lang:type=MemoryPool,name=Compressed Class Space 同 “java.lang:type=MemoryPool,name=CodeHeap 'non-nmethods'”
java.lang:type=MemoryPool,name=G1 Eden Space CollectionUsage  
CollectionUsageThreshold  
CollectionUsageThresholdCount  
CollectionUsageThresholdExceeded  
CollectionUsageThresholdSupported  
PeakUsage  
Usage  
Type HEAP:堆
UsageThresholdSupported  
java.lang:type=MemoryPool,name=G1 Old Gen CollectionUsage  
CollectionUsageThreshold  
CollectionUsageThresholdCount  
CollectionUsageThresholdExceeded  
CollectionUsageThresholdSupported  
PeakUsage  
Usage  
Type HEAP:堆
UsageThreshold  
UsageThresholdCount  
UsageThresholdExceeded  
UsageThresholdSupported  
java.lang:type=MemoryPool,name=G1 Survivor Space 同 “java.lang:type=MemoryPool,name=G1 Eden Space”
java.lang:type=MemoryPool,name=Metaspace 同 “java.lang:type=MemoryPool,name=CodeHeap 'non-nmethods'”
java.lang:type=OperatingSystem               Arch  
AvailableProcessors 系统中 CPU 核数
CommittedVirtualMemorySize  
FreePhysicalMemorySize  
FreeSwapSpaceSize  
MaxFileDescriptorCount  
Name 操作系统名称
OpenFileDescriptorCount  
ProcessCpuLoad  
ProcessCpuTime  
SystemCpuLoad  
SystemLoadAverage  
TotalPhysicalMemorySize  
TotalSwapSpaceSize  
Version 操作系统版本
java.lang:type=Runtime BootClassPathSupported  
ClassPath tomcat 运行时的 classpath
InputArguments 设置给 tomcat 的 jvm 参数
LibraryPath  
ManagementSpecVersion  
Name PID + 系统的 hostname
Pid tomcat 进程号
SpecName 如:Java Virtual Machine Specification
SpecVendor 如:Oracle Corporation
SpecVersion 如:11
StartTime tomcat 启动时间,单位 毫秒
SystemProperties  
Uptime tomcat 持续运行时间,单位毫秒
VmName 如:OpenJDK 64-Bit Server VM
VmVendor 如:Oracle Corporation
VmVersion 如:11.0.5+10-LTS
java.lang:type=Threading                AllThreadIds  活动的线程Id ,是一个 long 类型的数组
CurrentThreadCpuTime  
CurrentThreadCpuTimeSupported  
CurrentThreadUserTime  
DaemonThreadCount  守护线程数
ObjectMonitorUsageSupported  
PeakThreadCount  实时峰值
SynchronizerUsageSupported  
ThreadAllocatedMemoryEnabled  
ThreadAllocatedMemorySupported  
ThreadContentionMonitoringEnabled  
ThreadContentionMonitoringSupported  
ThreadCount  活动的线程数
ThreadCpuTimeEnabled  
ThreadCpuTimeSupported  
TotalStartedThreadCount  已启动的总数
java.nio:name=direct,type=BufferPool    Count  
 MemoryUsed  
 TotalCapacity  
java.nio:name=mapped,type=BufferPool Count  
MemoryUsed  
TotalCapacity  
java.lang:type=ClassLoading LoadedClassCount 已载入类数
  TotalLoadedClassCount 总共载入的类数量
  UnloadedClassCount 已卸载的类数量

 

 这个是各个 webapp 应用可监控的指标。

二、开启 tomcat jmx 监控

1、在 tomcat jvm 参数中配置 jmx 参数

 1) 查看 tomcat 的启动脚本,阅读脚本内容,查看该脚本中设置jvm参数是哪里,在其中加上 jmx 参数:

-Dcom.sun.management.jmxremote

-Djava.rmi.server.hostname=192.168.23.1

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

其中:

hostname 是你要查看的远程服务器的真实IP

port  是远程服务上 tomcat 要开启的 jmx 端口,这个端口只要选择服务器上没有被占用的端口即可。

一般上述内容加入:  进入Tomcat/bin目录,修改catalina.sh,找到如下内容   “#—–Execute The Requested Command”

2) 重启 tomcat

3) 使用 ps -ef|grep tomcat 查下 tomcat 进程,看下现在其启动参数中 jvm 参数里是否有 这个 jmx 参数

 上述图中可以看出 jvm 参数中成功加入 jmx 参数。

2、通过 jconsole 

 

 图中的 1 处填写 你要远程的 tomcat 所在 IP 以及 开放的 jmx 端口;

 

  MBean 页 中记录了所有 可以监控 tomcat 的监控项。

 可以看到 堆内存 使用情况,其它 Tab 亦然。

其实:图中所有 Tab (除了 Mbean) 的内容都是从 Mbean 中获取的。

3、通过 jvisualvm 工具监控

 

 

 

 三、集成监控软件

 1、集成  prometheus

1)  在虚拟机上安装  prometheus 软件

  可以查看该篇博客:https://www.cnblogs.com/fatyao/p/11007357.html

2、集成 zabbix 

原文地址:https://www.cnblogs.com/sandyflower/p/15495419.html