This is a quick summary for this process so that I can refer to it later on, and hopefully someone will find it useful as well.
Memcached requires libevent to handle its network IO stuff. The bundled libevent in the standard yum repository is old so it’s pretty useless. The newer versions memcached runs on newer libevent library so I ended up compiling libevent and memcached from the latest stable sources. I’m using libevent-1.4.4-stable and memcached-1.2.5.
First off, uninstall the libevent that yum may have installed on your machine
# sudo yum remove libevent
Download the sources for libevent and memcached , unzip( # gunzip *.gz ), untar (# tar -xvf *.tar), CD to the libevent folder. We will compile the libevent first.
# ./configure –prefix=/usr/local
# make install
Basically we are telling libevent to install itself under /usr/local/lib/. When we compile memcached, we need to point it to the correct location as well. Once libevent is done installing (it’s really quick), we can move on and complie memcached.
CD to the un-tar memcached folder,
# ./configure –with-lib-event=/usr/local/
# make install
After memcached is installed, you can try
In my situation, I ran into an error
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
It turned out that the new libevent get installed, it doesn’t “register” the actual library file (similar to DLL on Windows) with the system. When Memcached runs, it tries to look for the libevent-1.4.so.2 file but since libevent is still playing hide and seek somewhere, memcached cries.
To fix this, we need to manually load the libevent library file into the system via the ld configuration. From the man page of ld:
ld combines a number of object and archive files, relocates their data and ties up symbol references. Usually the last step in compiling a program is to run ld.
I like to think ld as the regsrv32 used to register DLL’s on Windows. Now to fix up the reference to the libevent so file, we need to create a file under /etc/ld.so.conf.d/
# vi /etc/ld.so.conf.d/libevent-i386.conf
Write and quit (:wq!)
The path in the libevent-i386.conf is the path where the actual .so files are located at. We set this path when we run the ./configure –prefix=/usr/local/ during the libevent compilation. Reloading the ld configuration with
now, you can start memcached in verbose mode (-vv) for testing
# memcached -vv
If you see something like ..
slab class 1: chunk size 104 perslab 10082
slab class 2: chunk size 136 perslab 7710
slab class 3: chunk size 176 perslab 5957
slab class 4: chunk size 224 perslab 4681
slab class 5: chunk size 280 perslab 3744
slab class 37: chunk size 367192 perslab 2
slab class 38: chunk size 458992 perslab 2
<6 server listening
<7 send buffer was 126976, now 268435456
<7 server listening (udp)
Congratulations! Memcached is up and running!