2015-01-02 50 views
6

我有一個奇怪的問題,因爲我已經將PHP從5.4升級到5.6。我從來沒見過自己的錯誤,但天天爆滿此消息日誌:PHP 5.6會話+ Memcache(d)

session_write_close():無法寫入會話數據(分佈式緩存)。請確認的session.save_path的當前設置是正確的(127.0.0.1:11211)

這確實不總是發生,但僅限於某些用戶。這發生在三臺不同的服務器上,最新的Debian上有PHP〜5.6 & Memcached。我嘗試將Memcached擴展切換到Memcache(當然,在php.ini中更改save_handler),問題仍然存在。我也試過在php.ini中禁用會話鎖定。這個問題肯定與PHP有關,因爲我用Perl腳本測試了Memcached守護進程本身,並且沒有發生單個連接錯誤。

一切工作都很完美很長一段時間,我在PHP升級後就開始遇到這個問題,所以它與memcached配置或類似的東西沒有關係。也許我錯過了什麼?也許5.6需要在其ini文件中增加一些配置?我只是不知道。

目前我有點卡住了,我希望任何人都可以幫助我的建議。我可以嘗試切換回5.4,或5.5,但這不是一個真正的選擇,我真的很想堅持5.6。

+0

當然5。6是理想的,但是在一段時間內回到5.5是一個主要困難?您可以編譯自己的版本,只需在Apache配置中將其切換到該框,以查看是否遇到同樣的問題。切換回主要的5.6版本將是微不足道的。 – halfer

回答

0

請確保你在php.ini中的會話是這樣的。

session.save_path = "tcp://127.0.0.1:11211" 

或unix套接字

session.save_path = "unix:///var/run/memcached.sock" 
1

有2擴展爲PHP,內存緩存memcached的

memcached擴展名基於libmemcache,您應該更喜歡那一個。

在內存緩存守護我的經驗當前版本並沒有隨着的memcache擴展發揮好。存儲數據很有效,但是在第一次請求之後將數據寫入會話遇到了很大的性能問題(首次請求全新會話很好,速度很快,接下來的每個請求花費了10秒鐘!)。替換memcachememcached修復了這個問題。

警告:memcached的的語法session.save_path略有不同。我不得不ommit的tcp://或它不會爲memcached的使用工作

所以:

session.save_path = "127.0.0.1:11211" 

而對於內存緩存使用:

session.save_path = "tcp://127.0.0.1:11211"