mina 运行4天后抛出如下异常,不知什么原因!
客户端在机房,服务器在公司内网的某台机器上,通过公司lvs设定使客户端可以访问到内网的服务器上。
客户端访问服务器频率约2分钟一次!
程序运行4-5天后出现如下异常!
同样的程序在内网运行了半个多月都没出现如下情况,哪位帮忙看下是怎么回事?
org.apache.mina.filter.codec.ProtocolDecoderException: org.apache.mina.common.BufferDataException: dataLength: -720899 (Hexdump: FF F4 FF FD 06)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:165)
at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:220)
at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:264)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.mina.common.BufferDataException: dataLength: -720899
at org.apache.mina.common.ByteBuffer.prefixedDataAvailable(ByteBuffer.java:1631)
at org.apache.mina.filter.codec.serialization.ObjectSerializationDecoder.doDecode(ObjectSerializationDecoder.java:88)
at org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:158)
不知道为什么会溢出,客户端发送时,保证了每个数据包大小不超过100kb!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
ObjectSerializationCodecFactory objSFactory = new ObjectSerializationCodecFactory();
objSFactory.setDecoderMaxObjectSize(MAX_OBJECT_SIZE);
objSFactory.setEncoderMaxObjectSize(MAX_OBJECT_SIZE);
int maxNioCache = 100 * 1024 * 1024;
log.info("设置NIO最大网络传输对象大小为:100M");
因为通过nio发送的对象超过限定大小了。。
是你的编解码器(decoder/encoder)的问题,你没有将接收的数据完整的读完。看看DemuxingDecoderFactory是怎样写的吧。
我也遇到过,我的判断是因为发送的保温编码有问题,我的解决方法是发送方和接收方都采用utf-8编码就可以了,以前也是偶尔出现一次这个问题,代码修改后未再出现过
紊乱就不会
但有时会连包的,还有时会把这个包分开二个bytebuffer发给你
你那个length是负数,好明显就是因为读错了
我server/clent都是java,传输是java object,使用的是内置的objectseriadecode 和encode!
包有可能会紊乱?
另外我的cache是2kb!
不明白的是他的lengh为什么会出现为负数
另外mina也提供了断包的解决方法:具体你可以看看这个类 org.apache.mina.filter.codec.CumulativeProtocolDecoder
应是数据包错乱了,还有mina的read cache你设成多小的
mina有时会有连包的情况(即二个客户端包打在一个bytebuffer上传过来给你)
可否把messageReceived这个方法贴出来看看哦
没明白,也帮顶一下
靠,怎么没人顶啊!算了,自己顶下!