监控
当您使用@EnableWebSocketMessageBroker
或<websocket:message-broker>
时,关键基础架构组件会自动收集统计信息和计数器,这些信息可以深入了解应用程序的内部状态。该配置还声明了一个类型为WebSocketMessageBrokerStats
的bean,该bean在一个地方收集所有可用信息,并默认每30分钟以INFO
级别记录一次。此bean可以通过Spring的MBeanExporter
导出到JMX,以便在运行时查看(例如,通过JDK的jconsole
)。以下列表总结了可用信息
- 客户端WebSocket会话
-
- 当前
-
指示当前有多少个客户端会话,该计数进一步细分为WebSocket与HTTP流和轮询SockJS会话。
- 总数
-
指示已建立的会话总数。
- 异常关闭
-
- 连接失败
-
已建立但随后在60秒内未收到任何消息后关闭的会话。这通常表示代理或网络问题。
- 发送限制已超过
-
在超过配置的发送超时或发送缓冲区限制后关闭的会话,这可能会在客户端速度慢时发生(参见上一节)。
- 传输错误
-
传输错误后关闭的会话,例如无法读取或写入WebSocket连接或HTTP请求或响应。
- STOMP帧
-
处理的CONNECT、CONNECTED和DISCONNECT帧的总数,指示在STOMP级别连接的客户端数量。请注意,当会话异常关闭或客户端在不发送DISCONNECT帧的情况下关闭时,DISCONNECT计数可能较低。
- STOMP代理中继
-
- TCP连接
-
指示代表客户端WebSocket会话建立到代理的TCP连接数量。这应该等于客户端WebSocket会话的数量+1个额外的共享“系统”连接,用于从应用程序内部发送消息。
- STOMP帧
-
代表客户端转发到代理或从代理接收的CONNECT、CONNECTED和DISCONNECT帧的总数。请注意,无论客户端WebSocket会话如何关闭,都会向代理发送DISCONNECT帧。因此,较低的DISCONNECT帧计数表示代理正在主动关闭连接(可能是因为心跳未及时到达、无效的输入帧或其他问题)。
- 客户端入站通道
-
支持
clientInboundChannel
的线程池的统计信息,这些信息可以深入了解传入消息处理的健康状况。此处排队的任务表示应用程序可能太慢而无法处理消息。如果有I/O绑定任务(例如,数据库查询缓慢、对第三方REST API的HTTP请求等等),请考虑增加线程池大小。 - 客户端出站通道
-
支持
clientOutboundChannel
的线程池的统计信息,这些信息可以深入了解向客户端广播消息的健康状况。此处排队的任务表示客户端太慢而无法使用消息。解决此问题的一种方法是增加线程池大小以适应预期的并发缓慢客户端数量。另一种选择是减少发送超时和发送缓冲区大小限制(参见上一节)。 - SockJS任务调度程序
-
用于发送心跳的SockJS任务调度程序的线程池的统计信息。请注意,当在STOMP级别协商心跳时,SockJS心跳会被禁用。