On 9/7/07, velytreuzien <[EMAIL PROTECTED]> wrote: > > Thanks! I found that thread > ( > http://www.nabble.com/1000%2B-simultaneous-connections-with-data-transfer--tf3607564s16868.html > ) > very useful! > > Summarising the tips given in that thread: > > 1. use FixedThreadExecutor for IoServices, e.g. for IoAcceptor: > acceptor = new SocketAcceptor(Runtime.getRuntime > ().availableProcessors()+1, > Executors.newFixedThreadPool(50)); > > But in the http://mina.apache.org/configuring-thread-model.html there is > written that: > > "Executors.newCachedThreadPool() is always preferred by IoService. It is > because using other thread pool type can lead to unpredictable performance > side effect in IoService. Once all threads in the pool become in use, > IoService will start to block while it tries to acquire a thread from the > pool and to start to show weird performance degradation, which is > sometimes > very hard to trace." > > What value can i choose for the fixed pool size constant to avoid > IoService > blocking (50 in the example above)?
That is also what I wonder. > 2. Reduce the size of send and receive buffers: > ((SocketSessionConfig) cfg.getSessionConfig()).setReceiveBufferSize(512); > ((SocketSessionConfig) cfg.getSessionConfig()).setSendBufferSize(512); > > What are the most suitable values if the messages in my protocol are quite > short - from 8 bytes to, lets say, 128 bytes? Is 64 bytes OK? Or the > buffer > can be used for several messages and so needs to be larger? It is depended on the OS. > 3. Try Linux due to it's better socket performance > I'll try it as soon as i will have the test machine for it. As well as i'm > going to set some agressive JVM options like: > ... -Xms512m -Xmx512m -Xss128k -XX:+AggressiveOpts -XX:+UseParallelGC > -XX:+UseBiasedLocking -XX:NewSize=64m But... As i mentioned in my first post, the profiler shows that the bottleneck is in sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(long, int, int[], int[], int[], long) method taking 64% of total execution time. Are there any special tweaks for it?.. Well, I suppose that suggestion no. 3 can help, because the problem seems to be in sun.nio.ch.WindowsSelectorImpl... Am i right? I don't know Linux performaces "that" better than windows does when we are talking about over 1K concurrent users. Maybe you should give a try. JDK 1.6(epoll) also may helps. I am too busy to start doing such a performance test. I will give the results if I do so. Good luck! > mat-29 wrote: > > > > Please search this thread: > > *1000+ simultaneous connections with data transfer* > > > > On 9/6/07, velytreuzien <[EMAIL PROTECTED]> wrote: > > > >> > >> No, it's an echo over my custom protocol. CPU usage is full - 100%. > I've > >> tried it on Athlon 3500+. > >> > >> Yes, i used the given lines for ByteBuffer, but the last version works > >> with > >> PooledByteBufferAllocator instead of Simple* - nothing changes, in > >> general. > >> > >> Today i've managed to run some tests on Dual Xeon 2.8 HT (4 virtual > >> cores) > >> with 4 threads for SocketAcceptor: > >> acceptor = new SocketAcceptor(4, Executors.newCachedThreadPool()); > >> It goes well until 1300-1500 clients, but then this is the same story. > >> > >> > >> mat-29 wrote: > >> > > >> > Did you use the echo example? What about the CPU usage? What's your > CPU > >> > model? > >> > > >> > Did you add? > >> > ByteBuffer.setUseDirectBuffers(false); > >> > ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); > >> > > >> > > >> > On 9/6/07, velytreuzien <[EMAIL PROTECTED]> wrote: > >> >> > >> >> > >> >> I'm running my application on the single cpu machine in the 100MBit > >> LAN. > >> >> Other three workstations in the LAN are emulating multiple clients. > >> >> > >> >> The server uses custom protocol codec filter and custom handler. The > >> >> configuration is: manual thread model, one thread for > SocketAcceptor, > >> no > >> >> ExecutorFilter in the filterchain (because with the ExecutorFilter > the > >> >> total > >> >> thread count increases rapidly up tho hundreds!! why?..) > >> >> > >> >> The fifth workstation in the LAN is running test application also > >> >> emulating > >> >> a client and measures server echo response timeout. > >> >> The average results are: > >> >> 1 client - 300 ms > >> >> 333 cleints - 400-500 ms > >> >> 666 clients - 1000-1500 ms > >> >> 1000 clients - strange fluctuations in 7-20 s range > >> >> > >> >> So we can clearly see the problem comes when the client count > >> increases. > >> >> > >> >> After i've thoroughly done the profiling i've managed to eliminate > all > >> >> hot > >> >> spots from my own code (anyway, almost nothing changed) and then the > >> >> performance has stuck to the > >> >> sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(long, int, int[], > >> int[], > >> >> int[], long) method taking 64% of total execution time. It's > enourmous > >> >> because my own logic thread takes only 16% of total, and the > >> asynchronous > >> >> writing thread (that responds to clients) takes 11%. > >> >> > >> >> The call tree descending to the mentioned method is: > >> >> java.lang.Thread.run() 71 % > >> >> > >> >> java.util.concurrent.ThreadPoolExecutor$Worker.run() > >> >> 71 % > >> >> > >> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Runnable) 71 > % > >> >> > >> >> org.apache.mina.util.NamePreservingRunnable.run() 71 % > >> >> > >> >> org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run() > >> >> 71 % > >> >> > >> >> sun.nio.ch.SelectorImpl.select(long) 70 % > >> >> > >> >> sun.nio.ch.SelectorImpl.lockAndDoSelect(long) 70 % > >> >> > >> >> sun.nio.ch.WindowsSelectorImpl.doSelect(long) 70 % > >> >> > >> >> sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400 > >> >> (WindowsSelectorImpl$SubSelector) > >> >> 64 % > >> >> > >> >> > >> >> sun.nio.ch.WindowsSelectorImpl$SubSelector.poll() 64 % > >> >> > >> >> > >> >> sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(long, int, > >> >> int[], int[], int[], long) 64 % > >> >> > >> >> Is there any workaround? Maybe somehow configure SocketIoProcessor > or > >> >> smth?.. How should it scale on a multiple cpu machine? > >> >> > >> >> Thanks for any kind of help in advance! > >> >> -- > >> >> View this message in context: > >> >> > >> > http://www.nabble.com/Performance-issue-with-selector-tf4390855s16868.html#a12518738 > >> >> Sent from the Apache MINA Support Forum mailing list archive at > >> >> Nabble.com > >> >> . > >> >> > >> >> > >> > > >> > > >> > >> -- > >> View this message in context: > >> > http://www.nabble.com/Performance-issue-with-selector-tf4390855s16868.html#a12522892 > >> Sent from the Apache MINA Support Forum mailing list archive at > >> Nabble.com > >> . > >> > >> > > > > > > -- > View this message in context: > http://www.nabble.com/Performance-issue-with-selector-tf4390855s16868.html#a12531112 > Sent from the Apache MINA Support Forum mailing list archive at Nabble.com > . > >
