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