I wonder whether Trustin or Peter can give more comments on this one? Thanks a lot.
On 7/23/07, Paddy O'Neill <[EMAIL PROTECTED]> wrote:
Hi This sounds similar to a problem that we encountered where mina was serving multiple sessions and forwarding to a single connection, similar to your environment. We found that the thread management in mina on the single connection side would not work efficiently and end up only allocating jobs to a single thread. This effectively caused the jobs to be executed sequentially, which in turn caused the backlog and memory buildup. I suspect that the issue is related to there only being a single connection on the IoConnector as we found that the jobs were allocated correctly across threads on the IoAcceptor side. We worked around it by removing the thread pool from the mina filter chain and implementing our own thread management just outside the mina interface. Paddy mat wrote: > 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 >> >