-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

All,

Last week, I decided to actually run my own performance measurements.
Before I waste a lot of time benchmarking, I wanted to vet my
methodology so I get all the data worth taking.

I'm using ApacheBench 2.3 (ships with httpd 2.2.10) as my benchmarking
tool, all running on localhost to avoid anything on my local network
interfering with the tests. I've also blocked all incoming traffic to
the web server using iptables. This machine provides no other services
(except ssh) and is only used by me, so that should be sufficient.

I have 15 static files of sizes 4, 8, 16, 32, 64, 128, and 512
kilobytes, 1, 2, 4, 8, 16, and 32 megabytes. I'm requesting each of them
100,000 times with a concurrency of 1 (single thread makes 100,000
requests). I'm using the "Transfer rate" (in KiB/sec) as the sample for
each. I have not enabled keepalives, but may for a second set of data.

I will be comparing an out-of-the-box prefork MPM httpd 2.2.10
configuration against an out-of-the-box Tomcat 5.5.26 Coyote, APR, and
APR without sendfile configurations (I didn't realize until after I
started my Coyote tests that NIO is only available in TC6.0, so I'll be
doing my NIO tests on 6.0).

I have a set of numbers for httpd and Coyote already (see below).

I have a few questions for those who wish to comment:

1. Is the number of requests (100,0000 sufficient? It seems to take
   forever on this machine... my Coyote tests took longer than
   overnight.

2. Is a concurrency of 1 okay? I thought about it and testing the
   ability of the OS to schedule processes and threads doesn't seem
   like it adds anything to the data.

3. Is it worth testing without sendfile enabled on those connectors
   that support it? I can reduce the time to generate all the data by
   skipping 3 of the tests.

4. Is transfer rate the best data to use? I suppose that depends on
   what I want to demonstrate. Since we get questions on this list like
   "which is faster for static content?" I figured that one of two
   things would be appropriate: the transfer rate or the number of
   requests per second. These numbers are directly related, and it's
   easier to graph numbers that are in the same range (you can serve
   a 4KiB file much faster than a 32MiB file), so I chose the former.

Below is the data I've collected so far. I'll publish everything on my
blog, including graphs, etc. once it's finished. (Strange that httpd
dramatically increased its transfer rate when requesting the 16MiB file!)

- -chris

100000 Requests localhost       keepalive=off
Concurrency=1           
Transfer Rate (KiB/sec)         
File Size       Apache httpd    TC5.5 Coyote
4kiB    6215.20 5467.43
8kiB    11630.17        9732.60
16kiB   21271.92        16266.66
32kiB   38257.77        27530.75
64kiB   63729.12        41946.45
128kiB  91768.23        56000.19
256kiB  126919.12       72062.84
512kiB  160506.81       66654.86
1MiB    180850.63       72533.92
2MiB    185157.29       75957.71
4MiB    185262.91       77969.20
8MiB    185152.66       79075.54
16MiB   256399.66       80364.26
32MiB   189933.50       80243.41
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkoRbeIACgkQ9CaO5/Lv0PAewQCbB7L0jaCWSD6EAcECKIRW/Uy2
AAUAoKpR/2MweDPcnmv3+a+EQd6n55+i
=Jd6Q
-----END PGP SIGNATURE-----

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

Reply via email to