只读LDAP连接池出现WriteToClosedSessionException异常排查
关于Apache Directory对接OpenLDAP出现WriteToClosedSessionException的问题
我们有两个Java服务,基于Apache Directory库对接OpenLDAP:
- 服务A:需执行LDAP写操作,配置了独立的只读连接池和读写连接池
- 服务B:仅拥有LDAP只读权限,从未执行写操作
近期日志中频繁出现以下WARN级异常,且服务B中也会出现该异常:
2024-12-10 08:23:45.563 [NioProcessor-143413] WARN org.apache.directory.ldap.client.api.LdapNetworkConnection - null [MDC: {}] org.apache.mina.core.write.WriteToClosedSessionException: null at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.clearWriteRequestQueue(AbstractPollingIoProcessor.java:1192) ~[mina-core-2.2.3.jar!/:?] at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.removeNow(AbstractPollingIoProcessor.java:1153) ~[mina-core-2.2.3.jar!/:?] at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.removeSessions(AbstractPollingIoProcessor.java:864) ~[mina-core-2.2.3.jar!/:?] at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:694) ~[mina-core-2.2.3.jar!/:?] at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) ~[mina-core-2.2.3.jar!/:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.lang.Thread.run(Thread.java:829) ~[?:?]
该问题仅在**升级至Linux 9(同步升级了OpenLDAP和Apache Directory版本)**后出现,且仅部分环境存在此现象。
异常堆栈未涉及业务代码,推测可能与org.apache.directory.ldap.client.api.LdapConnectionPool内部的连接有效性检查、回收机制相关。
技术疑问
- 该异常是否确实由连接池内部操作引发?
- 为何升级后仅部分环境出现此问题?有哪些进一步排查思路?(此为核心疑问)
- 异常中的“Writing”具体指什么?是写入LDAP记录,还是向LDAP发送数据(如搜索过滤条件)?即操作对象是LDAP存储还是网络流?
- 若“Writing”指写入LDAP记录,为何只读权限的服务B会出现该异常?
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

