1

I have found so many stuff related to Apache worker MPM is working fast than Prefork MPM, i know nginx is another option but i want to stick on apache as for use of htaccess and some other features, so i am doing a comparison using apache benchmark testing to serve static content (bg.png) file (size=232KB) and i surprised to see results that apache prefork serving static content faster than worker, the difference is not so big, but the results put me in doubt and i am not taking a decision on below tests, so please guide and help me.

Both tests are done on same server using loopback interface (127.0.0.1) localhost to avoid doubts related to network / bandwidth delays and also without keep alive.

1) Test using apache prefork

prefork MPM

StartServers 5 MinSpareServers 3 MaxSpareServers 5 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000

ab -n 1000 -c 900 http://localhost/bg.png

Document Path: /bg.png Document Length: 235354 bytes

Concurrency Level: 900 Time taken for tests: 1.053 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 235983024 bytes HTML transferred: 235738292 bytes Requests per second: 949.68 [#/sec] (mean) Time per request: 947.690 [ms] (mean) Time per request: 1.053 [ms] (mean, across all concurrent requests) Transfer rate: 218855.25 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 111 295.5 1 1000 Processing: 3 137 207.8 59 631 Waiting: 0 136 208.1 58 631 Total: 22 248 334.4 73 1024

Percentage of the requests served within a certain time (ms) 50% 73 66% 79 75% 660 80% 664 90% 672 95% 1019 98% 1022 99% 1023 100% 1024 (longest request)

2) Test using Worker MPM

ThreadLimit 200 StartServers 3 ServerLimit 25 MaxClients 2000 MinSpareThreads 50 MaxSpareThreads 200 ThreadsPerChild 100 MaxRequestsPerChild 0

Document Path: /bg.png Document Length: 235354 bytes

Concurrency Level: 900 Time taken for tests: 1.061 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 264421004 bytes HTML transferred: 264146992 bytes Requests per second: 942.39 [#/sec] (mean) Time per request: 955.018 [ms] (mean) Time per request: 1.061 [ms] (mean, across all concurrent requests) Transfer rate: 243347.56 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 58 158.4 37 1003 Processing: 31 255 330.6 88 884 Waiting: 0 223 336.7 50 870 Total: 68 313 354.1 112 1034

Percentage of the requests served within a certain time (ms) 50% 112 66% 150 75% 900 80% 905 90% 920 95% 921 98% 1032 99% 1033 100% 1034 (longest request)

Below are the differences

Prefork stats

Time taken for tests: 1.053 seconds Total transferred: 235983024 bytes HTML transferred: 235738292 bytes Requests per second: 949.68 [#/sec] (mean) Time per request: 947.690 [ms] (mean) Time per request: 1.053 [ms] (mean, across all concurrent requests) Transfer rate: 218855.25 [Kbytes/sec] received

worker stats

Time taken for tests: 1.061 seconds Total transferred: 264421004 bytes HTML transferred: 264146992 bytes Requests per second: 942.39 [#/sec] (mean) Time per request: 955.018 [ms] (mean) Time per request: 1.061 [ms] (mean, across all concurrent requests) Transfer rate: 243347.56 [Kbytes/sec] received

so as per above stats

Time taken for tests + Time per request is less for prefork then worker. So please guide & suggest, is prefork is best for serving static content ??

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.