本地XMPP连接随机断开伴XMLStreamException问题排查求助
故障原因分析:XMPP连接随机断开并触发XML解析异常
问题背景
我们的两个应用通过本地XMPP服务器通信,日常消息交互正常,但连接会随机断开;执行大批次任务时,几乎必然在运行中出现连接断开。报错显示在[39341,25831]位置发生XML解析异常,但我们从未传输过这么大的数据,请求分析故障原因。
错误日志
2022-12-22T21:06:49.406-0500 WARN Connection XMPPTCPConnection[user1@localhost/Avert] (0) closed with error org.jivesoftware.smack.xml.XmlPullParserException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[39341,25831] Message: Connection reset at org.jivesoftware.smack.xml.stax.StaxXmlPullParser.next(StaxXmlPullParser.java:193) ~[smack-xmlparser-stax-4.4.3.jar!/:4.4.3] at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1140) ~[smack-tcp-4.4.3.jar!/:4.4.3] at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$700(XMPPTCPConnection.java:913) ~[smack-tcp-4.4.3.jar!/:4.4.3] at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:936) ~[smack-tcp-4.4.3.jar!/:4.4.3] at java.lang.Thread.run(Unknown Source) [?:?] Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[39341,25831] Message: Connection reset at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) ~[?:?] at org.jivesoftware.smack.xml.stax.StaxXmlPullParser.next(StaxXmlPullParser.java:191) ~[smack-xmlparser-stax-4.4.3.jar!/:4.4.3] ... 4 more 21:06:49 XMPPConnection closed due to an exception (XMPPTCPConnection[user1@localhost/Avert] (0)) org.jivesoftware.smack.xml.XmlPullParserException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[39341,25831] Message: Connection reset at org.jivesoftware.smack.xml.stax.StaxXmlPullParser.next(StaxXmlPullParser.java:193) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1140) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$700(XMPPTCPConnection.java:913) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:936) at java.base/java.lang.Thread.run(Unknown Source) Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[39341,25831] Message: Connection reset at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) at org.jivesoftware.smack.xml.stax.StaxXmlPullParser.next(StaxXmlPullParser.java:191) ... 4 more
故障原因分析
- XML解析异常是连接断开的次生结果:日志核心错误为
Connection reset,[39341,25831]的行列号并非真实传输数据的大小,而是XML解析器在连接突然中断时,当前缓冲区的偏移位置标记,并非实际数据包的尺寸。 - 大批次任务触发资源瓶颈:高并发任务场景下,XMPP服务器或客户端的TCP连接缓冲区可能被耗尽,导致操作系统主动重置连接;另外服务器的线程池、内存资源不足,无法处理大量并发数据包,会强制断开连接。
- TCP层隐式问题:本地网络看似稳定,但大流量传输时可能出现丢包、延迟,触发TCP超时重传机制,最终导致连接被重置;防火墙或操作系统的TCP连接超时配置过短,也会在长时间大流量传输时强制断开连接。
- XMPP配置缺失或不合理:使用的Smack客户端(版本4.4.3)若未配置XEP-0199心跳机制,长时间无交互时会被服务器判定为死连接断开;服务器端的最大数据包大小、并发连接数限制过低,大批次任务会触发阈值导致连接中断。
内容的提问来源于stack exchange,提问作者runfastman
相关产品推荐
相关产品推荐

