Hi all,
I was looking for some performance data for EmbPerl, PHP, etc. but
could only find "Hello World"-type tests. So, I decided to add a few
other tests to the mix and post the results.
These test results are still very crude.
Any feedback/analysis/criticism would be appreciated.
Thanks!
Rob
MACHINE:
Dual Pentium III 500 MHz
256 MB RAM
RedHat 6.0 (Linux 2.2.5-15smp)
DATABASE SERVER:
Postgres 6.5.2
WEB SERVERS:
Apache w/ mod_perl, EmbPerl (using Apache::DBI)
- Apache/1.3.9 (Unix) mod_perl/1.21
Apache w/ mod_php (using persistent DB connection call)
- Apache/1.3.9 (Unix) PHP/3.0.12
AOLServer 2.3.3 (supports persistent DB connection)
- NaviServer/2.0 AOLserver/2.3.3
- threw this one in just for kicks
RELEVANT APACHE SERVER SETTINGS:
MinSpareServers 20
MaxSpareServers 35
StartServers 20
MaxClients 150
MaxRequestsPerChild 0
PerlSetEnv EMBPERL_OPTIONS 8082
PerlSetEnv EMBPERL_ESCMODE 0
PerlSetEnv EMBPERL_DEBUG 0
TESTS:
Test 1 - Static HTML
Test 1(b) - Static HTML with special extension
Test 2 - Hello World
Test 3 - Big Print
Test 4 - Small Database Query
Test 5 - Big Database Query
Test 1: Static HTML
- This is a 6K HTML file called "test1.html".
- No embedded code here.
Test 1(b): Static HTML with extension
- Identical to the static HTML file in every way
*except* that extension is changed to ".epl",
".php3", or ".adp" according to web server.
- No embedded code here.
Test 2: Hello World
- Simple test to print "Hello World".
- For each of EmbPerl, PHP, AOLServer:
[+ "Hello World" +]
<? echo "Hello World" ?>
<% ns_puts "Hello World" %>
Test 3: Big Print
- 1000 iterations of incrementally printing "a":
a
aa
aaa
aaaa
aaaaa
aaaaaa
...
- As an example: here's the EmbPerl code:
[-
for($i=0;$i < 1000;++$i) {
$a = $a . "a";
print OUT $a, "<br>";
}
-]
- Returned page was approximately 500 K.
Test 4: Small Database Query
- Fetch and display 1 record from a products database of about 300
records, searching for an exact match on an indexed field.
- Returned page was approximately 5K.
- Used persistent db connection in all cases.
Test 5: Big Database Query
- Fetch and display 24 records from a product database of about
300 records, using a "like" search on a text field.
- Returned page was approximately 118K.
- Used persistent db connection in all cases.
RESULTS:
- Results are "Requests per second". I'm not sure how to
interpret the numbers on an absolute scale, but the relative
comparisons should be somewhat meaningful.
- Each test was conducted 5 times and the average is shown.
- "ab" was used from the same machine as the web servers because
something "strange" happened when I ran it on another machine.
(I'll send a separate email regarding this.)
1000 requests, 1 concurrent
ab -n 1000 -c 1 <URL>
----------------------
Test1 Test1(b) Test2 Test3 Test4 Test5
-----------------------------------------------------------------------
Apache w/
modperl/ 852.86 99.53 217.25 16.96 78.12 18.32
EmbPerl
Apache w/ 836.47 100.06 560.78 16.15 98.76 18.80
PHP
AOLServer 100.01 99.72 100.06 12.89 156.30 14.29
1000 requests, 10 concurrent
ab -n 1000 -c 10 <URL>
----------------------
Test1 Test1(b) Test2 Test3 Test4 Test5
------------------------------------------------------------------------
Apache w/
modperl/ 890.37 248.00 262.47 30.31 158.50 45.17
EmbPerl
Apache w/ 957.30 492.55 559.71 23.81 268.34 34.64
PHP
AOLServer 758.54 227.76 816.65 5.97 141.19 7.45