On taking the thread dump for different versions - this is the extra
thread(locking monitors) which I receive in 2.0.0-M6 and 2.0.0.-RC1 --- I am
running JDK6 _20 64 bit on windows.
"NioProcessor-1" prio=6 tid=0x0000000067ece000 nid=0x18b4 runnable
[0x000000006c9cf000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at
sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:273)
at
sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:255)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:136)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
- locked <0x0000000063f01b50> (a sun.nio.ch.Util$1)
- locked <0x0000000063f01b38> (a java.util.Collections$UnmodifiableSet)
- locked <0x0000000063f01700> (a sun.nio.ch.WindowsSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
at
org.apache.mina.transport.socket.nio.NioProcessor.select(NioProcessor.java:69)
at
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:961)
at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Locked ownable synchronizers:
- <0x0000000063f010c8> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
Does it give any pointers that where I should be looking for?
Thanks
Vijay
-----Original Message-----
From: Ashish [mailto:[email protected]]
Sent: Wednesday, April 21, 2010 7:40 AM
To: [email protected]
Subject: Re: changes from Mina 2.0.0-M3 to 2.0.0-M6 to 2.0.0-RC1
The best way would be to take Thread dumps and see what's going on inside.
Using a logging filter could tell you a little more when things have
been processed...
thanks
ashish
On Tue, Apr 20, 2010 at 9:53 PM, Vijay K Pandey <[email protected]> wrote:
> Hi,
>
> I have an application which has a very simple scenario of sending Java
> POJO(serializable) objects from Mina client to server and client waits for
> the response.
>
> It was all working very fine with mina-core-2.0.0-M3.jar but looks like
> something has changed in mina-core-2.0.0-M6.jar and mina-core-2.0.0-RC1.jar
> where on several messages mina server receives the message from client ( both
> process running on same machine) after a delay of 5 seconds. I can see that
> on client side LoggingFilter has written the message but then there is a
> delay on server side when it is received.
>
> I ran the test on the same "dataset" for the above 3 versions of MINA and -
> M3 runs fine without any issue and there is no delay. I am testing this in a
> controlled environment where at any given point of time only 1 message is
> sent. Only after the response is received, does the second message is sent
> out.
>
> Message is basically - an array List - have 3 members where2 members are of
> string type and 1 member is HashMap of around 12 objects(11 are simple
> primitive wrappers and 1 POJO - having 6 primitives wrappers)
>
> Can someone point me to the right direction?
>
> Thanks
> Vijay
>
> -----------------Mina client code snippet ------------
> connector.getFilterChain().addLast("codec",new
> ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
> connector.getFilterChain().addLast( "logger",new LoggingFilter() );
> connector.setConnectTimeoutMillis(30 * 1000);
>
> ConnectFuture future1 = connector.connect( address );
> future1.awaitUninterruptibly(15, TimeUnit.SECONDS);
> if (!future1.isConnected()) {
> return false;
> }
> session = future1.getSession();
>
> CloseFuture closeFuture = session.getCloseFuture();
> closeFuture.addListener((IoFutureListener<?>) new
> IoFutureListener<IoFuture>() {
> public void operationComplete(IoFuture future) {
> System.out.println("The session is now closed");
> logger.info("Mina client session is getting closed");
> }
> });
>
> ---------------------------------------Mina Server Code snippet
> ---------------------------------------------------------
> acceptor = new NioSocketAcceptor();
>
> acceptor.getFilterChain().addLast( "logger",
> new LoggingFilter() );
> acceptor.getFilterChain().addLast( "codec",
> new ProtocolCodecFilter( new
> ObjectSerializationCodecFactory() ) );
>
> acceptor.setHandler( handler );
> acceptor.getSessionConfig().setReadBufferSize( 2048 );
> acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
> 3 );
>
> acceptor.bind( new InetSocketAddress( "127.0.0.1", port ) );