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 开发者
接口开放平台的产品设计脑图及解决方案
接口开放平台的产品设计脑图及解决方案
|
Docker 容器
Docker 容器与镜像的关系是什么?底层原理是什么?
Docker 容器与镜像的关系是什么?底层原理是什么?
1143 0
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
522 1
|
安全 JavaScript 前端开发
C++一分钟之-C++17特性:结构化绑定
【6月更文挑战第26天】C++17引入了结构化绑定,简化了从聚合类型如`std::tuple`、`std::array`和自定义结构体中解构数据。它允许直接将复合数据类型的元素绑定到单独变量,提高代码可读性。例如,可以从`std::tuple`中直接解构并绑定到变量,无需`std::get`。结构化绑定适用于处理`std::tuple`、`std::pair`,自定义结构体,甚至在范围for循环中解构容器元素。注意,绑定顺序必须与元素顺序匹配,考虑是否使用`const`和`&`,以及谨慎处理匿名类型。通过实例展示了如何解构嵌套结构体和元组,结构化绑定提升了代码的简洁性和效率。
481 5
|
Kubernetes 中间件 数据安全/隐私保护
traefik配置用户登录,限制K8S的web服务访问
像Elastic-APM, Traefik-Dashboard等页面,是没有用户登录限制的,如果我们希望给他们加上用户登录限制,我们需要在traeifk里给对应的ingress添加登录用的Middleware,那么该如何添加呢?本文以给K8S部署的traefik dashboard为例进行添加
1143 0
traefik配置用户登录,限制K8S的web服务访问
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
数据采集 机器学习/深度学习 人工智能
全球首个 3D 版 AI 合成主播亮相
AI 合成主播已不稀奇,但能走动、做手势、换装的 3D 版 AI 主播,「新小微」是全球第一个。
2031 0
全球首个 3D 版 AI 合成主播亮相
|
Unix Linux 应用服务中间件
【Linux】Linux 系统编程——相对路径和绝对路径
【Linux】Linux 系统编程——相对路径和绝对路径
1566 1
|
安全 网络安全 数据安全/隐私保护
什么是域名证书?
SSL证书的种类有好几种,都是用于保证网络传输的安全的。其中运用得比较普遍化的是域名证书,那么什么是域名SSL证书呢,很多人都不理解,下面就来看看吧。  首先要明确的是,SSL是一种网络传输安全协议,所以在网站的正常使用中都需要配置相关的SSL证书。
6819 0
|
NoSQL Linux Redis
Linux中部署Redis主从复制,主从复制原理
Linux中部署Redis主从复制,主从复制原理
306 1

热门文章

最新文章