2013-04-17 134 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的