Skip to main content

mysql - LAMP memory management (CentOS)

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


  • Things
    done:




  • All static stuff (jquery,
    styles, layout images) are server from an external
    webserver.

  • Wordpress cached as heavily as possible (W3
    Total
    Cache)




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

Popular posts from this blog

iLO 3 Firmware Update (HP Proliant DL380 G7)

The iLO web interface allows me to upload a .bin file ( Obtain the firmware image (.bin) file from the Online ROM Flash Component for HP Integrated Lights-Out. ) The iLO web interface redirects me to a page in the HP support website ( http://www.hp.com/go/iLO ) where I am supposed to find this .bin firmware, but no luck for me. The support website is a mess and very slow, badly categorized and generally unusable. Where can I find this .bin file? The only related link I am able to find asks me about my server operating system (what does this have to do with the iLO?!) and lets me download an .iso with no .bin file And also a related question: what is the latest iLO 3 version? (for Proliant DL380 G7, not sure if the iLO is tied to the server model)

linux - Awstats - outputting stats for merged Access_logs only producing stats for one server's log

I've been attempting this for two weeks and I've accessed countless number of sites on this issue and it seems there is something I'm not getting here and I'm at a lost. I manged to figure out how to merge logs from two servers together. (Taking care to only merge the matching domains together) The logs from the first server span from 15 Dec 2012 to 8 April 2014 The logs from the second server span from 2 Mar 2014 to 9 April 2014 I was able to successfully merge them using the logresolvemerge.pl script simply enermerating each log and > out_putting_it_to_file Looking at the two logs from each server the format seems exactly the same. The problem I'm having is producing the stats page for the logs. The command I've boiled it down to is /usr/share/awstats/tools/awstats_buildstaticpages.pl -configdir=/home/User/Documents/conf/ -config=example.com awstatsprog=/usr/share/awstats/wwwroot/cgi-bin/awstats.pl dir=/home/User/Documents/parced -month=all -year=all...

linux - How can I get my mediawiki to stop thinking I have cookies disabled?

I've searched half a day for how to resolve this issue, and can't figure it out. Shortly after I made my wiki a simple private wiki according to the instructions at Mediawiki's website, it started giving me this weird login error message: Wiki uses cookies to log in users. You have cookies disabled. Please enable them and try again. If I remove those private wiki settings, the error disappears, even if I try logging in. But I need it to be a private wiki for only my team. So what do I do? Here's what I've done so far. Just to be safe, after ever change, I try rebooting Apache using: sudo /etc/init.d/apache2 restart In my php.ini file, I have the following set: session.save_path = "/var/lib/php5" session.cookie_secure = secure session.cookie_path = /tmp session.cookie_domain = my server's internal URL (should I even set this? this field was blank before, but not commented out) session.referer_check = Off I ran the following to ensure that the fold...