![xcache_clear_cache 返回 500 内部服务器错误](https://linux22.com/image/689274/xcache_clear_cache%20%E8%BF%94%E5%9B%9E%20500%20%E5%86%85%E9%83%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%94%99%E8%AF%AF.png)
我的 XCache 配置可能有问题。服务器在 CentOS 7.2 上运行,带有 Plesk 12.5
php -v
给出以下输出:
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
我尝试运行下面的脚本来测试 XCache,它只显示Clearing XCache...
并且控制台指示 500(内部服务器错误)
<?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>";
下面是我当前的 XCache 配置/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/"
可能是什么问题?
xcache.ini
服务器上似乎有多个文件:
# 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
我在每个文件中都做了类似的配置。似乎还有多个xcache.so
文件。该行到底应该extension =
指向哪里?
# 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
答案1
XCache 现在对我来说运行良好。不确定到底是什么解决了这个问题,但我在服务器上进行了以下更新。
再次清理安装的 XCache。
还有另外一个错误:
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
为了解决这个问题,添加了一个新文件
php.ini
并var/www/vhosts/system/mydomain.com/conf
增加了pm.max_children
设置。然后通过以下方式将它们应用于域:# /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
上述每个域的 php-update 命令也可能解决了 XCache 问题。