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.
我不知道是什么导致它抛出,抛出时或为什么。
这是致命错误吗?如果是这样,有谁知道我可以在哪里解决它?
答案 0 :(得分:7)
我在SugarCRM Community Edition v6.5.15(Build 1083)中遇到了同样的问题。 我已经修复了这个强制memcached守护进程与客户端协商二进制协议(包括libmemcached C ++客户端)。这对我有用,试一试。
在Debian Wheezy中,memcached包在 /etc/memcached.conf 中有一个配置文件。在文件末尾添加此行:
-B binary
然后重启memcached服务
service memcached restart
答案 1 :(得分:6)
我会在libmemcached中查看storage.cc的第341行。 libmemcached没有很好地完成输入验证,所以根据说....你的键值(永远不会在键或键名称空间中使用空格),你可以在遇到错误时遇到很多麻烦。
查看源代码,libmemcache在发送命令并且无法发送命令后期待来自memcache服务器的回复。所以它可能有很多原因(关键错误,连接错误等)。
http://bazaar.launchpad.net/~tangent-trunk/libmemcached/1.0/view/head:/libmemcached/storage.cc
答案 2 :(得分:0)
首先 - 你应该检查连接限制。
当memcached服务达到连接限制(-c param)时,会出现此错误。默认情况下,限制设置为1024个连接。但是,如果您尝试进行多线程处理,则可能会很快达到限制。
默认配置路径: 的/ etc / SYSCONFIG / memcached的
答案 3 :(得分:-1)
在开发库时,我有完全相同的错误(除了“apache2”头),这是一个与线程相关的错误。 memcached客户端的一个实例由多个并发线程访问,因此客户端和服务器碰巧发生在不一致的状态。因此,libmemcached中返回代码rc
的断言失败。 As far as I see,定义连接的libmemcached内部结构不是线程安全的。
同时很难想象你怎么能在PHP中发生这个,可能是一个线程错误,它不提供线程实用程序。无论如何,你应该通过memcached连接检查代码是否有异常。