今天起看發現服務器的nginx產生大量日志了,並且提示PHP Warning: Memcache::connect(): Can\'t connect to 127.0.0.1:11211, Connection timed out (110) in,後來幾經周折找出問題所在了。
在一次例行檢查日志的時候,發現Nginx日志中出現了大量的PHP連接Memcached超時的報錯信息,如下:
PHP Warning: Memcache::connect(): Can't connect to 127.0.0.1:11211, Connection timed out (110) in ...
連上服務器檢查Memcached進程運行正常,然後我用一段測試代碼檢查Memcached是否能夠正常連接,結果也很正常。
於是又仔細分析日志,發現那段報錯信息是間隔出現的,說明是有一定幾率的。這時我回想起上周因為架構問題剛剛把PHP的Session存儲路徑指向到了Memcached裡,可能是因為這個配置增加了Memcached的負載,從而導致在並發量較高時,Memcached出現連接超時的現象。
找到原因就容易解決了。重新調整Memcached的啟動參數,增加-c參數來提高連接數量。默認為1024,可以逐步增加以找到最佳數值。我設置為2048。
啟動命令為:
代碼如下 復制代碼memcached -d -m 256 -c 2048 -l 127.0.0.1 -p 11211 -u root
如果服務器充裕,可以考慮分布式的memcached集群,以降低單個節點上的壓力,據說2.5有連接數量過多導致oom的bug