Although this might be completely meaningless in you situation, I'll
post it for orientation anyway. The benchmarks were done on 1 GHz Athlon
machine with 1/2 GB RAM and 80 GB IDE disk, running JBoss 2.4.7, Tomcat
3.3.1, Apache 2.0.43, mod_jk 1.2.0 on RedHat Linux 7.3, with IBM JDK
1.3.1 release cxia32131-20020622. The database used was PostgreSQL
7.2.3. Apache, mod_jk and PostgreSQL were compiled with gcc 3.2 by yours
truly.
The first benchmark was a fetch of a Model 1 JSP page which displays the
entry page in the product catalogue search. There was database access on
each request in order to retrieve categories and manufacturers, so it's
not just a simple "get the HTML page". The benchmark command was:
ab -k -c 10 -n 1600 http://www.firstsite.dev/products/index.jsp
---------------------------------------------------
Server Software: Apache/2.0.43
Server Hostname: www.firstsite.dev
Server Port: 80
Document Path: /products/index.jsp
Document Length: 6246 bytes
Concurrency Level: 10
Time taken for tests: 104.284779 seconds
Complete requests: 1600
Failed requests: 0
Write errors: 0
Keep-Alive requests: 0
Total transferred: 10393600 bytes
HTML transferred: 9993600 bytes
Requests per second: 15.34 [#/sec] (mean)
Time per request: 651.780 [ms] (mean)
Time per request: 65.178 [ms] (mean, across all concurrent
requests)
Transfer rate: 97.33 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 370 650 166.8 610 1975
Waiting: 370 649 166.5 610 1975
Total: 370 650 166.8 610 1975
Percentage of the requests served within a certain time (ms)
50% 610
66% 652
75% 685
80% 709
90% 826
95% 935
98% 1069
99% 1450
100% 1975 (longest request)
---------------------------------------------------
The next benchmark was on the same machine, but with a home page
containing dynamic content (i.e. from the product catalogue) fetched via
JBoss (i.e. EJB), using Velocity/PumpServlet in a Model 2 scenario.
However, the database content was cached in this case for the period of
60 seconds, so all requests but the first would have been cached.
Failures are due to uneven sizes of responses, which ab doesn't much
like. The benchmark command was:
ab -k -c 10 -n 1600 http://www.secondsite.dev/home.vm
---------------------------------------------------
Server Software: Apache/2.0.43
Server Hostname: www.secondsite.dev
Server Port: 80
Document Path: /home.vm
Document Length: 7686 bytes
Concurrency Level: 10
Time taken for tests: 35.808597 seconds
Complete requests: 1600
Failed requests: 958
(Connect: 0, Length: 958, Exceptions: 0)
Write errors: 0
Keep-Alive requests: 1590
Total transferred: 12796992 bytes
HTML transferred: 12300474 bytes
Requests per second: 44.68 [#/sec] (mean)
Time per request: 223.804 [ms] (mean)
Time per request: 22.380 [ms] (mean, across all concurrent
requests)
Transfer rate: 348.99 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 17 9483 6127.2 9102 24601
Waiting: 0 222 196.7 174 1908
Total: 17 9483 6127.2 9102 24601
Percentage of the requests served within a certain time (ms)
50% 9102
66% 11757
75% 13960
80% 15069
90% 18484
95% 20366
98% 22186
99% 23182
100% 24601 (longest request)
--------------------------------------------------
To have something to compare against, here is the benchmark for static
HTML from the same machine:
ab -k -c 10 -n 1600 http://www.rexursive.dev/index.html
--------------------------------------------------
Server Software: Apache/2.0.43
Server Hostname: www.rexursive.dev
Server Port: 80
Document Path: /index.html
Document Length: 25288 bytes
Concurrency Level: 10
Time taken for tests: 0.606350 seconds
Complete requests: 1600
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1590
Total transferred: 41047560 bytes
HTML transferred: 40460800 bytes
Requests per second: 2638.74 [#/sec] (mean)
Time per request: 3.790 [ms] (mean)
Time per request: 0.379 [ms] (mean, across all concurrent
requests)
Transfer rate: 66108.68 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 3 175 105.3 163 397
Waiting: 0 1 2.0 1 22
Total: 3 175 105.3 163 397
Percentage of the requests served within a certain time (ms)
50% 163
66% 207
75% 256
80% 285
90% 340
95% 367
98% 382
99% 389
100% 397 (longest request)
--------------------------------------------------
You can see that Apache 2 can deliver over 2.5k requests per second on
the page 3 times the size of those dynamic pages. So, if you were to
serve static content (or something you prepared earlier :-), Apache 2
wouldn't even blink, especially on the hardware you have.
I know you have a much better machine, but 1600 transactions does seem a
bit high. By all means, do your own benchmarks before you commit to
anything.
Bojan
On Sun, 2002-11-03 at 18:39, ryan wrote:
> 1. For a project my company is working on we have transactions
> requirements of 1600 transactions per second. The transactions consists
> of processing a servlet in Tomcat, doing a database call and then
> displaying the results to the user so the effective number of transactions
> Tomcat has to process is actually greater than 1600.
>
> Can Tomcat cope with 1600 requests in a second(a 4 processor Sunfire
> machine will be used)?
>
> Based upon our current application architecture(our java application has
> tomcat running inside it), 1600 request per second means we may have
> 1600 threads open simultaneously.
>
> 2. From one article I read at linux journal, Tomcat 3 didn't scale very
> well with multiple processors because of JVM issues.
--
To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
|