On Mar 19, 2013, at 8:49 PM, Saurabh Agrawal wrote: > Hi Nick, > > We currently have 8 tomcat nodes with each node configured to have 1000 > maxThreads. We did a round of performance test for 8000 concurrent users and > the observation was that the number of active executor threads were far less. > > My understanding was if 8000 concurrent users hit the site at the same time, > 8000 executor threads are required to suffice the requirement of all the > requests. However, I see far less executor threads in action when we put a > load of 8000 concurrent users. >
Yes, this is to be expected. Tomcat / the JVM will try to be as efficient as possible. A thread will only be in use during an active request. Just because you have 8,000 simultaneous users does not mean you have 8,000 simultaneous requests. Remember that "real" users will have some time between each request, ranging from a few seconds to several minutes depending on the page and the user. A good load testing tool like JMeter, The Grinder, or NeoLoad (just examples) will mimic this behavior by putting varying pauses between requests. It sounds like whatever tool you are using is doing this--that's good! So, 8,000 simultaneous users might result in only 400-500 simultaneous requests (just a guess; depends on your application and its user base). In this case, you'd only see 400-500 threads used across the cluster. In your small-scale test, where each request from your browser got the same thread, that could just be pure luck. If you're the only person using the server, it's likely that the Thread pool is extremely small, thus the odds are high that the same thread would get picked over and over again. However, in a high-load environment, this will not be the case, and the number of threads will nearly always be less than the number of simultaneous users. I'm glad to see that you have a working cluster of some sorts and that you are performing load tests to evaluate its performance. This means you are on the right track, making some good decisions, and have obviously done a little reading. I suspect a little more reading of the Connector documentation will help you understand exactly how all of this works. Nick P.S. Please remember to bottom post. Don't top post. > -----Original Message----- > From: Nick Williams [mailto:nicho...@nicholaswilliams.net] > Sent: Wednesday, March 20, 2013 1:44 AM > To: Tomcat Users List > Subject: Re: Tomcat Behavior on Multiple HTTP requests from same browser > > > On Mar 19, 2013, at 8:37 PM, Caldarale, Charles R wrote: > >>> From: Saurabh Agrawal [mailto:sagra...@sapient.com] >>> Subject: Tomcat Behavior on Multiple HTTP requests from same browser >> >>> Let's say I hit http://localhost:9001/homepage.html. Upon hitting the URL, >>> tomcat will assign one of the worker threads (say Thread 1) from the pool >>> to the HTTP request which will be processed and then response will be sent >>> to the client. Now if I hit a link on homepage which is for login, a >>> separate >>> HTTP request will be initiated from the same browser. >> >>> What I want to understand is if the Tomcat will keep Thread 1 as persistent >>> thread to server the second request (for login) from the same browser or >>> will >>> it assign a separate thread from the pool ? >> >> Normally, the first available thread from the pool is used for each request. >> However, if you are using the BIO <Connector> with keep-alives enable *and* >> the browser is using keep-alives, the same thread as long as the HTTP >> connection is active. >> >> See the HTTP <Connector> doc, especially the Connector Comparison at the end. >> >> http://tomcat.apache.org/tomcat-7.0-doc/config/http.html >> >> - Chuck > > I think the most important thing to say here is that there is NO guarantee > that the browser will always keep the connection alive, therefore there is NO > guarantee that every request will get the same thread. You should never rely > on having access to the same thread from one request to the next. (That is > what HttpSessions are for.) > > If you need to support 20,000 simultaneous users, you are going to need a > farm of servers. Just one server will not be enough. One simultaneous user > does not equal one thread needed: when a user is between requests, a thread > can be servicing some other request. You should read the Tomcat documentation > thoroughly, especial the sections on connection management, session > management and clustering. > > Nick > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org