[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 编码查看转换 | 代码下载 | 常见问题及讨论 | Python游戏编程讨论 | 《深入解析ASP核心技术》 | Python游戏编程教程 | AI图片生成
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[备忘]netty报错:BlockingOperationException

上一篇:[备忘]idea的debug模式,源代码打开错误的问题
下一篇:[备忘]netty,ChunkedFile,channelInactive()时没有释放file引用,导致文件删除不掉。

添加日期:2025/12/3 11:52:17 快速返回   返回列表 阅读26次
这个错误是 Netty 中常见的死锁检测异常。
当你在 EventLoop 线程中同步等待一个操作完成时,Netty 会检测到这可能造成死锁并抛出 BlockingOperationException。

[2025-11-15 14:15:23.551][WARN][nioEventLoopGroup-2-1]-> channelHandler异常
io.netty.util.concurrent.BlockingOperationException: DefaultChannelPromise@314f4aa6(incomplete)
    at io.netty.util.concurrent.DefaultPromise.checkDeadLock(DefaultPromise.java:386) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.channel.DefaultChannelPromise.checkDeadLock(DefaultChannelPromise.java:159) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.util.concurrent.DefaultPromise.awaitUninterruptibly(DefaultPromise.java:236) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.channel.DefaultChannelPromise.awaitUninterruptibly(DefaultChannelPromise.java:137) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.channel.DefaultChannelPromise.awaitUninterruptibly(DefaultChannelPromise.java:30) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.util.concurrent.DefaultPromise.syncUninterruptibly(DefaultPromise.java:335) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.channel.DefaultChannelPromise.syncUninterruptibly(DefaultChannelPromise.java:125) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at io.netty.channel.DefaultChannelPromise.syncUninterruptibly(DefaultChannelPromise.java:30) ~[netty-all-4.1.36.Final.jar:4.1.36.Final]
    at cn.xxx.client.service.ClientXXXService.doUploadUnpkgLog(ClientXXXService.java:337) ~[xxx-client-1.6.29.jar:?]
    at cn.xxx.client.netty.handler.xxxClientChannelHandler.handlerDataHeader(xxxClientChannelHandler.java:198) ~[xxx-client-1.6.29.jar:?]
    at cn.xxx.common.netty.channel.BytesCommandChannelInboundHandler.readBytesCommand(BytesCommandChannelInboundHandler.java:106) ~[xxx-common-client-1.2.18.jar:?]
    at cn.xxx.common.netty.channel.BytesCommandChannelInboundHandler.channelRead(BytesCommandChannelInboundHandler.java:91) ~[xxx-common-client-1.2.18.jar:?]
------------------------------
这里是因为BytesCommandChannelInboundHandler是使用IO线程执行的,
它调用了另外一个service的方法,里面又发送消息,还使用了syncUninterruptibly()方法,
也就是同步等待,所以netty认为死锁。

解决办法:
调用service扔到线程池里,异步执行。
    
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved