First of all, I have to say I am not an expert in server
administration. I have done web programming for 10+ years on several platforms, but have
most of the time come to a readymade situation where there's IT professionals or a good
web hosting company involved.
Now I'm
finally in a spot where I was required to build a LAMP-setup from scratch (with just a
vanilla CentOS install) to serve a pretty intense Wordpress
setup.
Everything kinda went smoothly as I have
been around the block with Linux-based server administration to get things running, but
I'm getting really weird system freezes a few times per week and since I'm the only one
who can access the server and boot up services, this is REALLY
annoying.
Here's some key
data:
Server
- 384MB
memory - CentOS 5.6
- PHP
5.2.10 - MySQL 5.0.77
- Apache
2.2.3
Usage
- ca.
300 articles in Wordpress - ca. 10k weekly
unique users - ca. 100k monthly
pageviews - All static stuff (jquery,
styles, layout images) are server from an external
webserver. - Wordpress cached as heavily as possible (W3
Total
Cache)
Things
done:
I've
narrowed the problem down to memory management - or the lack thereof. For some reason
swapping is disabled on the server and once the memory consumption reaches 100% the
server simply goes into thrashing and all hope is lost. The amount of memory (384MB)
should still be more than enough to host a site with these stats, so something is done
wrong. I'm just running out of ideas what it could
be.
I've obviously tried tweaking the settings
in my.cnf, php.ini and httpd.conf but to no avail. Here's my key settings at the
moment:
my.cnf
skip-innodb
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-ndbcluster
skip-bdb
skip-networking
safe-show-database
query_cache_limit=8M
query_cache_size=48M
query_cache_type=1
max_user_connections=200
max_connections=32
interactive_timeout=60
wait_timeout=60
connect_timeout=50
thread_cache_size=4
key_buffer=
96M
join_buffer=1M
max_connect_errors=20
max_allowed_packet=32M
table_cache=1024
record_buffer=1M
sort_buffer_size=6M
read_buffer_size=6M
read_rnd_buffer_size=6M
thread_concurrency=4
myisam_sort_buffer_size=32M
server-id=1
user=mysql
tmp_table_size=64M
max_heap_table_size=48M
php.ini
memory_limit
=
128M
httpd.conf
StartServers
2
MinSpareServers 3
MaxSpareServers
5
ServerLimit 16
MaxClients
16
MaxRequestsPerChild
1000
This is the part
where it might be very self evident I'm flying by the seat of my pants here. Are these
settings even remotely sensible for a 384MB server setup? What else can be done to
reduce the number of crashes where the only solution is me logging in to restart mysqld
and httpd?
I know all this is more or less been
discussed a million times before and trust me, I've gone through all the threads I've
found from Server Fault, tried all the tips and pointers, but to no
avail.
The silly thing is that we moved from a
pretty reliable web hosting setup to this way more costly virtual server setup to cut
down on worries on server stability and scaling, but it has in fact made things even
worse and no doubt 99% due to my own shortcomings as an
admin!
So please, gurus, help me out
a bit. I promise I'll never bitch to an IT guy about anything and will write only code
that's easy to deploy, won't crash in the middle of the night and generally remember you
in a positive way on other days in addition to Sysadmin Day.
Comments
Post a Comment