Hello,
I am trying to configure Tomcat to handle very large number (5000) of
simultaneous client connections via HTTP with keepalive. All the clients
produce equal constant load.
The problem is that before I reach maximum CPU load, everythings works fine,
clients are served equally with very low response times (<50 ms). But as I
pass full server saturation, one should expect that the server will still be
able to serve all the clients with accordingly higher response times. But it
looks that it is not the case. When I increase number of clients, nearly
constatnt number of clients remains served with low response times and the
rest of the clients are not served at all, connections are stalled.
I am using 5.5 now, but i checked 6.0 sources and it seems that implementation
is the same.
I did tomcat thread dump and found that:
about 1/3 of threads are waiting in:
"http-10.68.1.19-8080-3077" daemon prio=1 tid=0xa99420a0
nid=0x29c6 runnable [0x45107000..0x45107e30]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
which is perfect, but about 2/3 of thread are waiting for single lock in:
"http-10.68.1.19-8080-3078" daemon prio=1 tid=0xa9942e60
nid=0x29c7 waiting for monitor entry [0x45086000..0x45086eb0]
at
org.apache.catalina.util.InstanceSupport.fireInstanceEvent(InstanceSupport.java:180)
- waiting to lock <0xb2c337a8> (a [Lorg.apache.catalina.InstanceListener;)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187)
So I am thinking if this could not be the problem. Is is necessary to be this
implementation synchronized?
Thanks for any comments,
Dominik
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]