2013-04-17 344 views
5
apache2: libmemcached/storage.cc:341: memcached_return_t memcached_send_ascii(memcached_st*, memcached_server_write_instance_st, const char*, size_t, const char*, size_t, time_t, uint32_t, uint64_t, bool, bool, memcached_storage_action_t): Assertion `memcached_failed(rc)' failed. 

我不知道什麼是造成這拋出,當它被拋出,或爲什麼。奇怪的Memcached與Apache的問題

這是致命錯誤嗎?如果是這樣,有誰知道我可以修復它?

回答

6

我會看看libmemcached中storage.cc的第341行。 libmemcached在輸入驗證方面做得並不好,所以根據說....你的鍵值(不要在鍵或鍵名空間中使用空格)你可能會有很多錯誤。

看看源代碼,libmemcache在發送命令並且未能發送命令後,正在等待來自memcache服務器的回覆。所以它可能有很多原因(關鍵錯誤,連接錯誤等)。

http://bazaar.launchpad.net/~tangent-trunk/libmemcached/1.0/view/head:/libmemcached/storage.cc

+1

感謝,虐待看看 – Ascherer

7

我曾與SugarCRM的社區版v6.5.15同樣的問題(建設1083)。 我已經解決了這個問題,強制memcached守護進程與客戶端(包括libmemcached C++客戶端)協商二進制協議。這對我有用,試試吧。

在Debian Wheezy中,memcached包的配置文件爲/etc/memcached.conf。加入這一行,在文件的結尾:

-B binary 

然後重啓的memcached服務

service memcached restart 

更多信息:http://linux.die.net/man/1/memcached

-1

我有完全相同的錯誤(除了 「Apache2的」 頭)開發時庫和它是一個線程相關的錯誤。 memcached客戶端的一個實例被多個併發線程訪問,所以客戶端和服務器碰巧發生了不一致的狀態。因此,libmemcached中的返回碼rc上的斷言失敗。 As far as I see,定義連接的libmemcached內部結構不是線程安全的。

與此同時,不容易想象你怎麼能做到這一點,大概是一個線程錯誤,發生在PHP,它不提供線程實用程序。無論如何,你應該檢查你的代碼與memcached連接做一些不正常的事情。

0

首先 - 你應該檢查連接限制。

當memcached服務達到連接限制時出現此錯誤(-c param)。默認情況下,限制設置爲1024個連接。但是,如果您嘗試進行多線程,則可能會很快達到極限。

預設配置路徑: 的/ etc/SYSCONFIG/memcached的