We've got a server which is kept fairly busy with a couple of largish sites
running Drupal (5) + Wordpress. Between them the sites served 750,000 pages
a month last month; this should triple shortly (based on previous marketing
campaigns).

Current load is moving towards capacity for the frontfacing webserver (DBs
hosted on a separate VM) and it seems that most of the server's work is CPU
load compiling scripts, so I've been testing out a few opcode caches. The
resulting performance boost is great, but with both APC and eAccelerator we
see segfaults after a few hours (quicker with eAccelerator).

If I can get rid of the segfaults, I'll be a lot more confident about
weathering the upcoming load, and I'd like to know what other folks
experience of opcode caches are, and how you've tamed yours.

I guess what I don't fully understand is what triggers the segfaults. From
my observation, it's not so much the time the process has been running as
the number of requests that its handled - which could suggest that it's just
a game of roulette, and any given request has a 1/10000 chance of segfault.
Ugh.

Ideally, I want to fix things so the opcode cache behaves, without dropping
requests on a segfault (even a few a day is too many in my book - we need to
project a high standard).

Some crude options I'm considering, if segfaults are just accepted practice
with an opcode cache ...

   - forcing apache2ctl graceful at regular intervals - but this is like
   driving with an oil leak and three spare cans of oil - it's just not right
   - setting maxrequests low enough that apache will restart each process
   before it has a good chance of segfaulting

Some alternatives, which I'd prefer to avoid because I don't want to rock
the config too much:

   - reverse proxy with pound
   - move static files to a non-php virtualhost with mod_rewrite (but would
   the redirects count as requests, for the purposes of segfaults?)
   - more extreme tactics like lighttpd

I'd really appreciate any suggestions / input. (Open to commercial support
offers too, of course.)

Thanks in advance

---------

*Details, details* ...

Servers are Xen domUs running Debian Etch, with the front-facing webserver
on one CPU and the DB server on the other. CPUs are 2.33Ghz; DB server has
2GB RAM, webserver has 3GB. There's also a mostly idle domU for testing.
Apache2 MPM prefork, PHP5 from current Debian Etch packages. eAccel is from
the packages by Andrew McMillan.

Drupal is 5.10 with normal Drupal caching, and Wordpress is 2.3.3 with its
builtin caching enabled.

Configs tested with:

APC:

apc.enabled       = 1
apc.shm_size      = 256
apc.max_file_size = 10M
apc.stat          = 1
apc.shm_segments  = 1
apc.mmap_file_mask = /tmp/apc.XXXXXX

eAccel:

[eaccelerator]
eaccelerator.shm_size="256"
eaccelerator.cache_dir="/var/cache/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

--~--~---------~--~----~------------~-------~--~----~
NZ PHP Users Group: http://groups.google.com/group/nzphpug
To post, send email to [email protected]
To unsubscribe, send email to
[EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

Reply via email to