[peruser] Patch for busy servers

Marcelo Coelho marcelo at tpn.com.br
Mon Jan 3 12:39:24 MST 2011


Here it is again. New update (v3).

Changelog (from RC2):

* (v3) Performance: new child type (CHILD_TYPE_RESERVED) to avoid collision (2 childs trying to get the same free slot).
* (v3) Bug fixed: wait_timeout was always 0, never sleeping to wait for new workers.
* (v2) Performance: you can speed up first access increasing StartProcessors
* (v2) Performance: childs are started in ~50ms, 20 times faster than in RC2 (~1000ms)
* Performance: faster to lookup for free slots (this is important on busy servers, with many virtual hosts)
* Performance: faster to count processors, one single loop counts all processors
* Bug fixed: bug when MinSpareProcessors? is set to 0 (now all workers processes are killed when idle_timeout is reached)
* Bug fixed: Free-up slots when a WORKER or PROCESSOR unexpectedly dies

Download:

Patch from RC2:
http://opensource.mco2.net/download/apache/peruser/peruser-rc2-to-rc3-v3.patch

Full patch from vanilla Apache 2.2.17:
http://opensource.mco2.net/download/apache/peruser/peruser-rc3-full-v3.patch

Stress test result (35,957 request per second):

# ab -n 100000 -c 100 -k http://192.168.1.47/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.47 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests


Server Software:        Apache/2.2.17
Server Hostname:        192.168.1.47
Server Port:            80

Document Path:          /
Document Length:        12 bytes

Concurrency Level:      100
Time taken for tests:   2.781 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Keep-Alive requests:    99056
Total transferred:      33071373 bytes
HTML transferred:       1200468 bytes
Requests per second:    35957.97 [#/sec] (mean)
Time per request:       2.781 [ms] (mean)
Time per request:       0.028 [ms] (mean, across all concurrent requests)
Transfer rate:          11613.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       6
Processing:     0    3   1.0      3      55
Waiting:        0    3   1.0      3      55
Total:          0    3   1.2      3      57

Percentage of the requests served within a certain time (ms)
  50%      3
  66%      3
  75%      3
  80%      3
  90%      3
  95%      5
  98%      5
  99%      7
 100%     57 (longest request)


--
Marcleo Coelho
marcelo at mco2.com.br


More information about the Peruser mailing list