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

王全 发布于 2009/04/14 14:26
阅读 7K+
收藏 1

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

加载中
0
王全
王全

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

0
电子商务

没明白,也帮顶一下

0
JavaGG
JavaGG

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

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

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

0
JavaGG
JavaGG

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

0
王全
王全

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

包有可能会紊乱?

另外我的cache是2kb!

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

0
JavaGG
JavaGG

紊乱就不会

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

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

0
d
dafei

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

0
s
sshi1984

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

0
DD2086
DD2086

收藏此话题 | 回复此话题 mina 运行4天后抛出如下异常,不知什么原因!

王全 发表于 2009-04-14 14:26 8回/310阅 ,对应项目:MINA

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

.arround_threads {font-weight:bold;padding:10px;line-height:22px;} .arround_threads a {font-weight:normal;}
王全 发表于 2009-04-14 14:59 回复此话题

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

Ioss 发表于 2009-04-14 15:02 回复此话题

没明白,也帮顶一下

JavaGG 发表于 2009-04-14 15:13 回复此话题

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

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

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

JavaGG 发表于 2009-04-14 15:21 回复此话题

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

王全 发表于 2009-04-14 16:20 回复此话题

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

包有可能会紊乱?

另外我的cache是2kb!

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

JavaGG 发表于 2009-04-14 16:35 回复此话题

紊乱就不会

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

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

dafei 发表于 2009-07-20 14:01 回复此话题

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

sshi1984 发表于 2009-07-29 14:32 回复此话题

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

0
于敏
ObjectSerializationCodecFactory objSFactory = new ObjectSerializationCodecFactory();
objSFactory.setDecoderMaxObjectSize(MAX_OBJECT_SIZE);

objSFactory.setEncoderMaxObjectSize(MAX_OBJECT_SIZE);

int maxNioCache = 100 * 1024 * 1024;

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

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

返回顶部
顶部