How to install XCache 3.0 from source

Alright... So APC has been pretty unstable for me on 2 separate servers running PHP 5.3.x and PHP 5.4.x. So I figured I'd give XCache a try after reading about similar problems with APC.

Anyhow...

Here's how to install XCache 3.X from source on CentOS

Get the latest version of XCache from here: http://xcache.lighttpd.net/#Downloads

Latest version at the time of this writing is XCache 3.0.1

cd /usr/local/src
wget http://xcache.lighttpd.net/pub/Releases/3.0.3/xcache-3.0.3.tar.gz
tar xvfz xcache-3.0.3.tar.gz
cd xcache-3.0.3 
phpize
./configure --enable-xcache
make
make install

Note the installation path. Example here are my paths:

PHP 5.3:
/usr/local/lib/php/extensions/no-debug-non-zts-20090626/

PHP 5.4
/usr/local/lib/php/extensions/no-debug-non-zts-20100525/

Now we copy and paste all the content from xcache.ini and paste into your php.ini.

OK. Once copied paste it into your php.ini.

vi /usr/local/lib/php.ini

Now paste this somewhere above the rest of your extensions.

NOTICE: to get your password XCache settings below do the following:

echo -n "YOURPASSWORD" | md5sum
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626/"
 
 
;; this is an example, it won't work unless properly configured into php.ini
[xcache-common]
;; non-Windows example:
extension = xcache.so
;; Windows example:
; extension = php_xcache.dll
 
[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.user = "admin"
; set xcache.admin.pass = md5($your_password)
; GET PASS LIKE SO: echo -n "YOURPASSWORD" | md5sum
; login use $your_password
xcache.admin.pass = "YOURPASSWORD"
 
[xcache]
; ini only settings, all the values here is default unless explained
 
; select low level shm implemenation
xcache.shm_scheme =        "mmap"
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size  =               60M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 8
; just a hash hints, you can always store count(items) > slots
xcache.slots =                8K
; ttl of the cache item, 0=forever
xcache.ttl   =                 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval =           0
 
; same as aboves but for variable cache
xcache.var_size  =            4M
xcache.var_count =             1
xcache.var_slots =            8K
; default value for $ttl parameter of xcache_*() functions
xcache.var_ttl   =             0
; hard limit ttl that cannot be exceed by xcache_*() functions. 0=unlimited
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300
 
; mode:0, const string specified by xcache.var_namespace
; mode:1, $_SERVER[xcache.var_namespace]
; mode:2, uid or gid (specified by xcache.var_namespace)
xcache.var_namespace_mode =    0
xcache.var_namespace =        ""
 
; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory. (auto create/overwrite)
; Use something like "/tmp/xcache" instead of "/dev/*" if you want to turn on ReadonlyProtection
; different process group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path =    "/tmp/xcache"
 
 
; Useful when XCache crash. leave it blank(disabled) or "/tmp/phpcore/" (writable by php)
xcache.coredump_directory =   ""
; Windows only. leave it as 0 (default) until you're told by XCache dev
xcache.coredump_type =         0
 
; disable cache after crash
xcache.disable_on_crash =    Off
 
; enable experimental documented features for each release if available
xcache.experimental =        Off
 
; per request settings. can ini_set, .htaccess etc
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =           Off
 
[xcache.coverager]
; enabling this feature will impact performance
; enabled only if xcache.coverager == On && xcache.coveragedump_directory == "non-empty-value"
 
; per request settings. can ini_set, .htaccess etc
; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions
xcache.coverager =           Off
xcache.coverager_autostart =  On
 
; set in php ini file only
; make sure it's readable (open_basedir is checked) by coverage viewer script
xcache.coveragedump_directory = ""

Everything is default except the following:

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20090626/"

Added my php extensions location install path noted at the beginning of this how-to.

; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 8

Our server has 8 cores.

xcache.mmap_path =    "/tmp/xcache"

We are using the /tmp/xcache location and not the default /dev/zero

Everything else is left at default.

Ok... So now we restart the apache.

service httpd restart

Then we see if it's installed properly

php -v

We should see something similar to this:

PHP 5.3.21 (cli) (built: Feb 10 2013 19:39:52) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
    with XCache v3.0.1, Copyright (c) 2005-2013, by mOo
    with XCache Cacher v3.0.1, Copyright (c) 2005-2013, by mOo

And, one final note--just a heads up, so you're not confused after reading older (xcache 1.x-2.x) how-to's. XCache 3.x is no longer installed with zend_extension but instead uses extension--which is the default listed in the XCache 3.x xcache.ini.

Tags: XCache APC Linux Server how-to