0

There could be a problem with my XCache configuration. The server is running on CentOS 7.2 with Plesk 12.5

php -v gives following output:

PHP 5.4.16 (cli) (built: Aug 11 2016 21:24:59)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo
    with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.12, Copyright (c) 2002-2015, by ionCube Ltd.
    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo

I am trying to run below script to test XCache and it just displays Clearing XCache... and the console indicates 500 (Internal Server Error)

<?php
error_reporting(E_ALL & ~E_NOTICE);

echo '<pre>';
echo 'Clearing XCache...';

for ($x = 0, $total = xcache_count(XC_TYPE_VAR); $x < $total; $x++)
{
    xcache_clear_cache(XC_TYPE_VAR, $x);
    echo "\n.";
}

echo "\nCompleted</pre>";

Below is my current XCache configuration in /etc/php.d/axcache.ini

[xcache-common]
;; non-Windows example:
extension = "./usr/lib64/php/modules/xcache.so"
;; Windows example:
; extension = php_xcache.dll

[xcache.admin]
xcache.admin.enable_auth = "Off"

; use http://xcache.lighttpd.net/demo/cacher/mkpassword.php to generate your encrypted password
xcache.admin.user = "admin"
xcache.admin.pass = "md5$password_removed"

[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 =                 2
; 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 =             2
xcache.var_slots =            8K
; default value for $ttl parameter of xcache_*() functions
xcache.var_ttl   =             7200
; hard limit ttl that cannot be exceed by xcache_*() functions. 0=unlimited
xcache.var_maxttl   =          14400
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 =    "/dev/zero"


; 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 =            On

[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 = "/tmp/pcov/"

What could be the issue?

There seems to be multiple xcache.ini files on server:

# find -name *xcache.ini
./opt/plesk/php/5.3/etc/php.d/40-xcache.ini
./opt/plesk/php/5.2/etc/php.d/40-xcache.ini
./opt/plesk/php/5.4/etc/php.d/40-xcache.ini
./etc/php.d/axcache.ini
./usr/local/src/xcache-3.2.0/xcache.ini

I have made similar configurations in each of them. There also seem to be multiple xcache.so files. Where exactly should the line extension = point to?

# find -name xcache.so
./opt/plesk/php/5.3/lib64/php/modules/xcache.so
./opt/plesk/php/5.2/lib64/php/modules/xcache.so
./opt/plesk/php/5.4/lib64/php/modules/xcache.so
./usr/lib64/php/modules/xcache.so
./usr/local/src/xcache-3.2.0/.libs/xcache.so
./usr/local/src/xcache-3.2.0/modules/xcache.so
iA001
  • 1
  • 4
  • What go your logs say ? – user9517 Sep 04 '16 at 05:04
  • I checked `./var/log/plesk-php54-fpm/error.log` and found the following lines: `[04-Sep-2016 03:54:13] WARNING: [pool mydomain.com] child 3387 said into stderr: "NOTICE: PHP message: PHP Fatal error: xcache_count(): xcache.admin.pass is 22 chars unexpectedly, it is supposed to be the password after md5() which should be 32 chars in /var/www/vhosts/mydomain.com/public_html/xcache_testfile.php` – iA001 Sep 04 '16 at 14:37
  • I have even searched for xcache.admin.pass in all ini files and all of them are updated with actual 32-char md5 password. But the error is still there. `grep --include=\*.ini -rnw / -e xcache.admin.pass /opt/plesk/php/5.3/etc/php.d/40-xcache.ini:13:xcache.admin.pass = "my_pwd" /opt/plesk/php/5.4/etc/php.d/40-xcache.ini:13:xcache.admin.pass = "my_pwd" /etc/php.d/axcache.ini:13:xcache.admin.pass = "my_pwd" /usr/local/src/xcache-3.2.0/xcache-zh-gb2312.ini:13:xcache.admin.pass = "" /usr/local/src/xcache-3.2.0/xcache.ini:13:xcache.admin.pass = "my_pwd"` – iA001 Sep 04 '16 at 17:13

1 Answers1

0

XCache is now working fine for me. Not sure what exactly solved the issue, but I made the following updates on the server.

  1. Clean installed XCache once again.

  2. There was another error that said:

    WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
    

    To solve this, added a new file php.ini in var/www/vhosts/system/mydomain.com/conf and increased pm.max_children setting. Then applied them on the domain by

    # /usr/local/psa/bin/php_settings -u
    Per-domain PHP settings of all domains were successfully updated.
    # service php-fpm restart
    Redirecting to /bin/systemctl restart  php-fpm.service
    

It is possible that the above per-domain php-update command solved the XCache issue as well.

iA001
  • 1
  • 4