一直都是用軍哥的 lnmp 一鍵安裝包來配置伺服器環境,最近一個月來,網站流量上來了些,可能還有其他原因,導致伺服器負載不太穩定,負載時不時會飆升好幾倍甚至十幾倍,訪問就非常慢啦。昨天下午直接導致伺服器 nginx 程式死掉了,想來想去,最後還是決定配置 lnmp 1.1 ,順便安裝 Xcache 物件快取擴充套件,配合之前的 Memcached 記憶體快取一起,負載很明顯就下來了,記憶體佔用也小多了。
XCache 簡介
XCache 是一個國人開發的又快又穩定的 PHP opcode 快取器. 經過良好的測試並在大流量/高負載的生產機器上穩定執行。經過 (在 linux 上) 測試並支援所有現行 PHP 分支的最新發布版本。
瞭解更多資訊,請訪問官方檔案:http://xcache.lighttpd.net/
Lnmp 下安裝 XCache
lnmp 安裝包已經整合了安裝指令碼,進入 lnmp 解壓後的目錄,執行:./xcache.sh 執行後有如下提示 (1.1 版本):

一個有兩個版本可以選擇,分別是 XCache 2.0.1 和 XCache 3.1.0 ,建議安裝 XCache 3.1.0 輸入 new 回車,出現 「Press any key to start...or Press Ctrl+c to cancel「,再次回車確認即可開始安裝。安裝過程會讓你輸入 Xcache 管理員密碼,輸入即可。預設管理員使用者名稱是 admin 。
安裝好以後,訪問 http://你的伺服器 IP/xcache/ 輸入 admin 使用者名稱和密碼就可以登入管理介面:

點選右上角的 「診斷」,可以看到你目前的 Xcache 設定是否存在什麼問題,而且給出瞭解釋和建議,非常人性化。

設定 XCache
Xcache 的設定選項在 php.ini 裡,lnmp 1.1 自動新增的如下:
;xcache
[xcache-common]
extension = xcache.so
[xcache.admin]
xcache.admin.enable_auth = On
; 預設的管理員使用者名稱,你可以修改 admin 為其他使用者名稱
xcache.admin.user = "admin"
;run: echo -n "yourpassword" |md5sum |awk '{print }' to get md5 password 以下是密碼,就是安裝時設定的 (MD5 加密)
xcache.admin.pass = "5ed1b644b258a5cc83"
[xcache]
xcache.shm_scheme = "mmap"
; 物件快取的大小,預設好像是 20M,可能不夠用,自己修改大些
xcache.size = 20M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1
xcache.slots = 8K
xcache.ttl = 0
xcache.gc_interval = 0
; 變數快取大小,預設是 4M,一般的程式是沒有用到這個快取的,可以不理會
xcache.var_size = 4M
xcache.var_count = 1
xcache.var_slots = 8K
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 300
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
xcache.mmap_path = "/dev/zero"
xcache.coredump_directory = ""
xcache.experimental = Off
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off
[xcache.coverager]
; enabling this feature will impact performance
; enable only if xcache.coverager == On && xcache.coveragedump_directory == "non-empty-value"
; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions
xcache.coverager = Off
xcache.coveragedump_directory = ""
;xcache end
我們一般就修改一下管理員使用者名稱 xcache.admin.user 和 物件快取大小 xcache.size 即可,當然,如果你使用了 XCache 的變數快取,也可以進行相應設定 xcache.var_size 、 xcache.var_slots 等。
更詳細的設定說明,請看官方檔案:http://xcache.lighttpd.net/wiki/XcacheIni
WordPress 使用 Xcache 進行變數快取
Xcache 不僅可以快取 php,還可以快取變數 (類似於 Memcached),就是上面圖中的 Var 快取,對於 WordPress,只需要下載 https://WordPress.org/plugins/xcache/ 外掛,解壓後,將裡面的 object-cache.php 上傳到 wp-content 目錄即可。
注意:
如果你一個主機安裝了多個 WordPress,請使用不透過的資料庫表字首,比如 wp_ 、 wp2_ ,否則可能會導致變數衝突!
如果你之前使用了 Memcached 進行變數快取,請不要同時使用 Xcache 的變數快取功能,兩者選其一!!