Cobar AsynchronousCloseException

简介:

Cobar在测试的时候看到日志里会报很多如下的错误:

java.nio.channels.AsynchronousCloseException

atjava.nio.channels.spi.AbstractInterruptibleChannel.end

at sun.nio.ch.SocketChannelImpl.read

atcom.alibaba.cobar.net.AbstractConnection.read

at com.alibaba.cobar.net.NIOReactor$R.read

at com.alibaba.cobar.net.NIOReactor$R.run

at java.lang.Thread.run(Thread.java:722)

看一眼代码很容易看出WARNING的原因:Cobar的IO模型是reactor式的,采用Java的NIO

首先是Reader线程

Object att = key.attachment();

if (att != null&& key.isValid()) {

int readyOps = key.readyOps();

if((readyOps & SelectionKey.OP_READ) != 0) {

read((NIOConnection) att);

elseif((readyOps & SelectionKey.OP_WRITE) != 0) {

write((NIOConnection) att);

else{

key.cancel();

}

else {

key.cancel();

}

再看后端Channelclose

private void mysqlClose() {

try {

if (out != null){

out.write(QuitPacket.QUIT);

out.flush();

}

catch (IOException e) {

LOGGER.error(toString(), e);

finally {

try {

socket.close();

catch (Throwable e) {

LOGGER.error(toString(), e);

}

}

}

Reader线程在从Socket读取的时候不是同步的,因此后端Channel关闭的时候Reader可能正在读取,换句话说,Reader会有一定概率从一个已经关闭的socket读取数据,因此报出这个异常,不过并不会影响实际业务,因为这个数据并不会被处理到;并且在Reader加同步会严重影响到系统的吞吐量,因此这个WARNING是可以忽略的.



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1300024,如需转载请自行联系原作者

相关文章
|
API 开发者
接口开放平台的产品设计脑图及解决方案
接口开放平台的产品设计脑图及解决方案
|
存储 数据安全/隐私保护 数据中心
Incus 6.4 容器和虚拟机管理器发布
【10月更文挑战第26天】
700 2
Incus 6.4 容器和虚拟机管理器发布
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
507 1
|
安全 JavaScript 前端开发
C++一分钟之-C++17特性:结构化绑定
【6月更文挑战第26天】C++17引入了结构化绑定,简化了从聚合类型如`std::tuple`、`std::array`和自定义结构体中解构数据。它允许直接将复合数据类型的元素绑定到单独变量,提高代码可读性。例如,可以从`std::tuple`中直接解构并绑定到变量,无需`std::get`。结构化绑定适用于处理`std::tuple`、`std::pair`,自定义结构体,甚至在范围for循环中解构容器元素。注意,绑定顺序必须与元素顺序匹配,考虑是否使用`const`和`&`,以及谨慎处理匿名类型。通过实例展示了如何解构嵌套结构体和元组,结构化绑定提升了代码的简洁性和效率。
461 5
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
Kubernetes 中间件 数据安全/隐私保护
traefik配置用户登录,限制K8S的web服务访问
像Elastic-APM, Traefik-Dashboard等页面,是没有用户登录限制的,如果我们希望给他们加上用户登录限制,我们需要在traeifk里给对应的ingress添加登录用的Middleware,那么该如何添加呢?本文以给K8S部署的traefik dashboard为例进行添加
1113 0
traefik配置用户登录,限制K8S的web服务访问
|
Unix Linux 应用服务中间件
【Linux】Linux 系统编程——相对路径和绝对路径
【Linux】Linux 系统编程——相对路径和绝对路径
1487 1
|
安全 网络安全 数据安全/隐私保护
什么是域名证书?
SSL证书的种类有好几种,都是用于保证网络传输的安全的。其中运用得比较普遍化的是域名证书,那么什么是域名SSL证书呢,很多人都不理解,下面就来看看吧。  首先要明确的是,SSL是一种网络传输安全协议,所以在网站的正常使用中都需要配置相关的SSL证书。
6751 0
|
NoSQL Linux Redis
Linux中部署Redis主从复制,主从复制原理
Linux中部署Redis主从复制,主从复制原理
291 1
|
人工智能 算法 固态存储
极智AI | 目标检测实现分享三:详解YOLOv3算法实现
大家好,我是极智视界,本文详细介绍一下 YOLOv3 算法的设计与实践。
410 0

热门文章

最新文章

下一篇
开通oss服务