监控
当您使用 @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 心跳将被禁用。