Install memcached with CentOS and WHM/cPanel

This guide will walk you through installing memcache and memcached on a dedicated or vps server.

For the wiki version of this guide visit:

root# yum install libevent libevent-devel -y

Head over to and grab the latest version.

root# yum install libevent-devel libevent gcc make -y
root# wget
root# tar xvf memcached-1.4.5.tar.gz
root # cd memcached-1.4.5
root# ./configure && make && make install

Open /etc/memcached.conf with your favorite editor and paste in:

#Memory a usar
-m 16
# default port
-p 11211
# user to run daemon nobody/apache/www-data
-u nobody
# only listen locally
touch /etc/init.d/memcached
chmod +x /etc/init.d/memcached

Open /etc/init.d/memcached with your favorite editor and paste in:

# memcached    This shell script takes care of starting and stopping
#              standalone memcached.
# chkconfig: - 80 12
# description: memcached is a high-performance, distributed memory
#              object caching system, generic in nature, but
#              intended for use in speeding up dynamic web
#              applications by alleviating database load.
# processname: memcached
# config: /etc/memcached.conf
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $DAEMON ] || exit 0
[ -x $DAEMONBOOTSTRAP ] || exit 0
start() {
 echo -n $"Starting $DESC: "
 [ $RETVAL -eq 0 ] && touch $PIDFILE
 return $RETVAL
stop() {
 echo -n $"Shutting down $DESC: "
 killproc $NAME
 [ $RETVAL -eq 0 ] && rm -f $PIDFILE
 return $RETVAL
# See how we were called.
case "$1" in
  status $prog
  echo $"Usage: $0 {start|stop|restart|status}"
  exit 1
exit $RETVAL
touch /usr/local/bin/start-memcached
chmod +x  /usr/local/bin/start-memcached

Open /usr/local/bin/start-memcached with your favorite editor and paste in:

#!/usr/bin/perl -w
# start-memcached
# 2003/2004 - Jay Bonci <[email protected]>
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if ($> != 0 and $< != 0) {
 print STDERR "Only root wants to run start-memcached.\n";
my $etcfile = shift || "/etc/memcached.conf";
my $params = [];
my $etchandle;
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/
my $memcached = "/usr/local/bin/memcached";
my $pidfile = "/var/run/";
# If we don't get a valid logfile parameter in the /etc/memcached.conf file,
# we'll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for
# the tip
my $fd_reopened = "/dev/null";
sub handle_logfile {
 my ($logfile) = @_;
 $fd_reopened = $logfile;
sub reopen_logfile {
 my ($logfile) = @_;
 open *STDERR, ">>$logfile";
 open *STDOUT, ">>$logfile";
 open *STDIN, ">>/dev/null";
 $fd_reopened = $logfile;
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
 "logfile" => \&handle_logfile
if (open $etchandle, $etcfile) {
 foreach my $line (<$etchandle>) {
  $line =~ s/\#.*//go;
  $line = join ' ', split ' ', $line;
  next unless $line;
  next if $line =~ /^\-[dh]/o;
  if ($line =~ /^[^\-]/o) {
   my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
  push @$params, $line;
unshift @$params, "-u root" unless (grep $_ eq '-u', @$params);
$params = join " ", @$params;
if (-e $pidfile) {
 open PIDHANDLE, "$pidfile";
 my $localpid = <PIDHANDLE>;
 chomp $localpid;
 if (-d "/proc/$localpid") {
  print STDERR "memcached is already running.\n";
 } else {
  `rm -f $localpid`;
my $pid = fork();
if ($pid == 0) {
 exec "$memcached $params";
} elsif (open PIDHANDLE,">$pidfile") {
 print PIDHANDLE $pid;
} else {
 print STDERR "Can't write pidfile to $pidfile.\n";

Now we start the memcached daemon. (it is ok if “shutting down memcached” says fail.)

[root@ ~]# /etc/init.d/memcached restart
Shutting down memcached:                                   [  OK  ]
Starting memcached:                                        [  OK  ]

Make sure its running by:

[root@srv01 init.d]# ps aux  | grep memcached
nobody    5966  0.5  0.3 18248 16444 pts/0   S    13:55   0:00 /usr/local/bin/memcached -u root -m 16 -p 11211 -u nobody -l

Now we will set memcached to run at startup:

[root@ ~]# /sbin/chkconfig memcached on
[root@ ~]# /sbin/chkconfig --list | grep memcached
memcached       0:off   1:off   2:on    3:on    4:on    5:on    6:off

Now we will install the memcache plugin for PHP.

Download the latest stable version of memcache from

root# wget
root# tar xvf memcache-2.2.5.tgz
root# cd memcache-2.2.5
root# phpize
root# ./configure && make && make install

Now open /usr/local/lib/php.ini with your favorite text editor and find the dynamic extension section.

Add this

Now restart apache with:

service httpd restart

We will now check to make sure memcached is running.

Create an empty file called test.php and place this in it:

<? phpinfo();  ?>
root# php -f test.php  | grep "memcache support"
memcache support => enabled

If this command does not return any thing the memcache plugin did not load correctly.

You can now delete test.php, your memcache installation should be functional.


9 Responses

  1. Igor G. September 7, 2010 / 9:05 am

    Very good tutorial about installing memcached on centos. I am running centos on AWS and had no idea about these commands, which I find very useful.

    Thank you.

  2. Frank September 8, 2010 / 1:50 pm

    Thanks for this great guide! Saved me a lot of effort – keep up the great work!

  3. Vinayak March 10, 2011 / 9:22 am

    Good one..THanks a lot..SAved a lot of time 🙂

  4. Mike July 25, 2011 / 4:32 am


    Please help me, How to migrate memcache from one machine to another. I mean I need the data in memcached migrated. I am using slackware13.1 linux


  5. ddd November 11, 2011 / 10:18 am

    Thanks the guide worked flawlessly…

  6. Nuno January 30, 2012 / 2:59 pm

    I think you have something wrong on /etc/init.d/memcached STATUS command…I replace status $prog with status $NAME and works fine now…

  7. Martijn Heemels October 16, 2012 / 5:27 am

    I’m aware your question is over a year old, but I wanted to post this for future readers. Memcached is a non-persistent cache, which means it isn’t designed to store data long-term. A restart of the memcached process (or a crash of the server) is enough to wipe the cache. Don’t depend on memcached as the only source of your data. You apps should be able to start with an empty cache and rebuild it as it goes.

    In other words, I’m not sure why you would want to migrate the cache to another machine. If your apps can’t handle the load of starting with an empty cache, you’d be better off creating a way to pre-heat the cache before you open the server for the public. Depending on a non-persistent cache to persist is not wise.

    If you still want to migrate your cache to another host, here’s a detailed article that describes the process (with code):

    Other solutions (that you may want to look into for the future) are Repcached (a replicated memcached) or a cache that supports persistence to disk, such as Redis.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.