与apache奇怪的Memcached问题

时间:2013-04-17 18:20:44

标签: php apache2 memcached

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.

我不知道是什么导致它抛出,抛出时或为什么。

这是致命错误吗?如果是这样,有谁知道我可以在哪里解决它?

4 个答案:

答案 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

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

答案 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连接检查代码是否有异常。