Network: Apache: Speeding up your webserver

(last edit: 2001-06-13)

Introduction

Apache and the GENERIC kernel are a bit slow. This is because you will run out of available buffers. You can 'fix' this by compiling a new kernel (read below). NOTE: this is not THE solution to a slow webserver. The prolem can be a slow (IDE) disk, not enough memory, etc.

Kernel changes

You'll have to add/change the following kernel options: maxusers 32 options NMBCLUSTERS=1024 Taken from '/usr/src/sys/i386/conf/LINT': "# The `maxusers' parameter controls the static sizing of a number of # internal system tables by a complicated formula defined in param.c." The 'NMBCLUSTERS' option has no comment in the LINT file. You shouldn't choose a higer value than 512 for 'maxusers'. This option is already in your kernel, just change the value. The max value of 'NMBCLUSTERS' is unkown to me, I currently have it at 10000 without any problems. You should first try a higher maxusers before adding the 'NMBCLUSTERS' option to your kernel. Before the tweak: $root@host:/#sysctl -a ... kern.maxproc: 532 kern.maxfiles: 1064 ... kern.maxfilesperproc: 1064 ... kern.ipc.nmbclusters: 1024 ... kern.ipc.nmbufs: 4096 After the tweak: $root@host:/#sysctl -a ... kern.maxproc: 8212 kern.maxfiles: 16424 ... kern.maxfilesperproc: 16424 ... kern.ipc.nmbclusters: 10000 ... kern.ipc.nmbufs: 40960 Read this document if you don't know how to compile a kernel.

Testing

One of the programs you can use for testing is '/usr/ports/www/http_load'. Below are some before and after results (note that this is NOT the max you can get from your machine, it is not a intensive test, this test depend also highly on the hardware, etc, etc it is just an illustration). Before the tweak: $root@host:/#http_load -parallel 40 -seconds 2 node http://127.0.0.1: No buffer space available ... http://127.0.0.1: No buffer space available http://127.0.0.1: No buffer space available 936 fetches, 11 max parallel, 1.22616e+06 bytes, in 2.00591 seconds 1310 mean bytes/connection 466.622 fetches/sec, 611275 bytes/sec 0.327848 mean msecs/connect 5.83531 mean msecs/first-response After the tweak: $root@host:/#http_load -parallel 40 -seconds 2 node 1630 fetches, 17 max parallel, 2.1353e+06 bytes, in 2.00011 seconds 1310 mean bytes/connection 814.955 fetches/sec, 1.06759e+06 bytes/sec 0.314662 mean msecs/connect 6.33601 mean msecs/first-response So tweak, test, tweak, test until your happy (don't forget to think about your hardware!!)

Click here to go back to the index.