Centos7
xcache_clear_cache 返回 500 內部伺服器錯誤
我的 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
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 問題。