Thanks a lot.
My server has one client (using mina too) connecting to a data source(20 -
30 /sec incoming messages) and the other side is server listening on one
port to broadcasting messages to end users(I wish Mina could handle 1000+
concurrent users). No other heaving loading process.
If the incoming messages is not fast, I don't think i need a
ReadThrottleFilter, right?
The following are the part of write method:(I am sure not the write problem
since normally no user connected OOM also happened, however you can point
out why Future.join helps here. ^^)
synchronized(sessions)
{
ByteBuffer buf = ByteBuffer.allocate(512);
buf.setAutoExpand(true);
Object message = serviceMessage.getMessage();
if (!(message instanceof byte[]))
return;
buf.put((byte[])message);
buf.flip();
Iterator iter = sessions.values().iterator();
while(iter.hasNext())
{
IoSession session = (IoSession) iter.next();
session.write(buf.duplicate());
}
}
On 7/20/07, Luis Neves <[EMAIL PROTECTED]> wrote:
Hi,
mat wrote:
> My server sometimes faced "OOM" problem. (I couldn't profile it since
TPTP
> crashed my server before OOM occured). I didn't see major memory leak
when
> profiling. Therefore, I believe OOM happens when READ or WRITE operation
> can't handle the incoming messages or outgoing messages. (However my
> incoming messages normally 20 * 512bytes/sec, NOT too fast, right?).
Last
> time i saw my server memory usage is over 600MB in windows XP.
Your code is broken ... the question is where. Mina can handle that amount
of
messages without breaking a sweat.
Do you have some kind of heavy processing in the receiving end that delays
the
acceptance of messages?
Did you try to use the ReadThrottleFilter?
How are you doing you writes?
A simple "iosession.write()" ?
Did you try something like:
WriteFuture wf = iosession.write();
wf.join();
Can we see the code of your Encoder/Decoder?
--
Luis Neves