tovaldez wrote:
[...]


Actually HTTP sessions >> effective users, since each user has a 10 minutes 
simulated navigation but the HTTP session is lasting a lot more (I think 1 hour by 
default in tomcat).
What I thought was that using HTTP 1.1, I would have only 1 phisical connection 
to the server for each user... This seems not to be, as if the same physical 
connection is used contemporarily by more clients.
I am asking if it could be a poor testing design or if we are wrong in our 
consideration...

To the best of my knowledge :
If your HTTP connections use "Keep-Alive", then one TCP connection will remain open for a while, between one browser and the server it is directly connected to.
What this "for a while" means precisely depends on a number of factors.
The server will time-out this connection (close it, and release the corresponding thread/child) if it does not receive new requests on this connection for a period of time (defined in the server configuration), or after processing a certain number of requests on that connection (also defined in the server configuration). And all bets are off if between the browser and the server, there are intermediaries, such as proxies, firewalls, front-ends etc.. Some proxies/firewalls etc.. may even apparently use a single TCP connection to the back-end server, to serve requests from different clients. (I can't give you a precise reference, but this was mentioned in the last couple of months in a thread either here or on the Apache httpd user's list).

What it means is that Chris is right, and there is no immediate link between the number of clients that may be in a "virtual session" with your application, and the number of open TCP connections (or active threads) on your server.

In other words :
A client sends a first request to your server, and it is a direct connection. The client is HTTP/1.1 capable, and indicates it wants a Keep-Alive connection. So after the response is received, it will keep the connection open. After this first request/response, the server will also keep the TCP connection open, for some seconds (not usually minutes), waiting for another request on the connection. And at the server side, there will also be the corresponding child or thread listening for that next request. If the browser sends one, it will thus be processed by the same thread/child, and the timer will be reset. If the browser does not send another request after a few seconds though, the server will close the connection and recycle the child/thread. So the next time the browser sends a request, it will have to re-open a TCP connection, and it will probably be another child/thread that handles this request on the server side. The timeout is usually rather short, because otherwise the server would have umpteen threads/children that would be kept waiting for another request that might never come, and would be unavailable to serve other requests from other clients.

The point is that the Keep-Alive mechanism was not designed to "reserve" one server thread/child for each client browser over an extended period. It was designed so that when a browser receives an html page containing 5 embedded thumbnail images, it could request these thumbnails right away over the same TCP connection, without having to re-create a new TCP connection for each of them, which saves overhead at each end.



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to