mina 运行4天后抛出如下异常,不知什么原因!

发布于 2021-11-29 18:05:47 字数 2377 浏览 702 评论 10

客户端在机房,服务器在公司内网的某台机器上,通过公司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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

风透绣罗衣 2021-11-29 21:42:35

ObjectSerializationCodecFactory objSFactory = new ObjectSerializationCodecFactory();

objSFactory.setDecoderMaxObjectSize(MAX_OBJECT_SIZE);

objSFactory.setEncoderMaxObjectSize(MAX_OBJECT_SIZE);

int maxNioCache = 100 * 1024 * 1024;

log.info("设置NIO最大网络传输对象大小为:100M");

因为通过nio发送的对象超过限定大小了。。

丢了幸福的猪 2021-11-29 21:42:00

是你的编解码器(decoder/encoder)的问题,你没有将接收的数据完整的读完。看看DemuxingDecoderFactory是怎样写的吧。

少女情怀诗 2021-11-29 21:41:27

我也遇到过,我的判断是因为发送的保温编码有问题,我的解决方法是发送方和接收方都采用utf-8编码就可以了,以前也是偶尔出现一次这个问题,代码修改后未再出现过

不再见 2021-11-29 21:40:39

紊乱就不会

但有时会连包的,还有时会把这个包分开二个bytebuffer发给你

你那个length是负数,好明显就是因为读错了

妖妓 2021-11-29 21:29:09

我server/clent都是java,传输是java object,使用的是内置的objectseriadecode 和encode!

包有可能会紊乱?

另外我的cache是2kb!

不明白的是他的lengh为什么会出现为负数

卸妝后依然美 2021-11-29 21:21:57

另外mina也提供了断包的解决方法:具体你可以看看这个类 org.apache.mina.filter.codec.CumulativeProtocolDecoder

一笔一画续写前缘 2021-11-29 21:19:54

应是数据包错乱了,还有mina的read cache你设成多小的

mina有时会有连包的情况(即二个客户端包打在一个bytebuffer上传过来给你)

可否把messageReceived这个方法贴出来看看哦

瀞厅☆埖开 2021-11-29 19:42:39

没明白,也帮顶一下

妖妓 2021-11-29 18:22:52

靠,怎么没人顶啊!算了,自己顶下!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文