New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MyCat1.4 AIO meet MySQL errno 1156 Got packets out of order #700
Comments
aio 不推荐使用了 |
后续考虑废弃AIO |
你可以考虑跟踪下具体原因,另外有同学反馈是原因就是同一个buffer被多个io线程同时写数据导致,你可以具体分析下 |
我们最终也是怀疑bufferpool里的buffer由于多线程原因导致buffer里面的数据乱掉,但是能力有限,没排查出来,但是我们测试过如果不通过bufferpool取buffer,而每次new bytebuffer来使用,那么是不会发生那个ERROR的。 |
试试新版的bytebufferarena还有directbuffer |
每次new出来就失去了缓存池的意义了 应该是aio的实现有问题 导致同一个buffer被多个线程同时获取到了 |
恩 我懂 我们只是为了将问题排查尽量缩小范围,并发问题比较难排查,我们之前也在怀疑是不是DirectByteBuffer的问题,但是也没试验过。这个问题确实隔了太久,也从来没人提过遇到这个问题,并且这么多前辈都说用NIO,要考虑废弃AIO,所以我们这边也没出人力去debug这个问题了 |
最近大量碰到这个问题,抓包看回包内容是最近一次收到包的拷贝。怀疑也是buffer问题。 |
我们在对mycat压测过程中也发现了该问题,不过我们使用的是NIO,,buffer可能还是有问题: |
最近发现的包乱序是,keepalived 心跳导致的,你们看看你们的对mycat的心跳是不是频率太大,或者有问题 |
@huangyiminghappy 你的版本是?这个issue是我在1.4版本里面发现的,当时换成NIO测试,没发现包乱序问题 |
@ZzzCrazyPig 我是1.6开发版 |
https://github.com/mysqljs/mysql/issues/1363 出现1156 Got packets out of order con有多种可能,有一种可能是mysq限制了server接受的数据包大小。 +--------------------+---------+ 以上说明目前的配置是:1M 但是,目前遇到的不是mysql限制的问题,我们配置的允许大小有1G |
经过定位,发现是MySQL服务端响应客户端查询请求的第一阶段handleErrorPacket这里引发的错误,在这里收到mysql服务端发来的错误包: 实际上确实冤枉,这简单的语句怎么会部分有错部分没错,id是某范围内随机的(select * from sbtest1 where id =71822855) |
我在生产环境中的1.5release版本上,NIO,也偶尔有1156 Got packets out of order 的错误,另外,mycat貌似对MySQL的报文没有做拆包处理,所以mycat端能够处理的最大的报文是16M还是8M。不过生产上SQL都很短小,应该不是报文过长导致的1156error |
@ZzzCrazyPig 根据你提供的代码已经找到问题所在,buffer被2次重复释放导致。 这个问题在1.6版本NIO 模式下,已在2018/9/7 |
#1. 错误描述
在对MyCat1.4版本AIO网络模型并发测试下,发现经常发生Mysql errno 1156 Got packets out of order
以下是MyCat日志报告信息:
#2. 错误复现
2.1 测试环境
2.2 测试表结构
2.3 MyCat配置
(1) schema.xml配置
(2) server.xml配置
(3) sequence_conf.properties配置
2.4 测试程序配置
测试程序下载地址 : https://github.com/ZzzCrazyPig/TestMyCatErr1156.git
(1) 测试程序配置随机sql
config目录 : randomSql.txt
(2) 配置TestMyCatErr1156.java启动参数示例:
**【注意】**测试程序一直循环测试,直到遇到错误码1156即停止测试
The text was updated successfully, but these errors were encountered: