php使用memcached扩展的一个BUG

memcache是一套分布式的高速缓存系统,很多网站都在使用memcache,以提高网站的访问速度。最近,遇到了一个比较头痛的问题。

首先,分离出关键的代码:

$mc=new Memcached();
$mc->addServer("www.xxx.com",11711);   //www.xxx.com为未解析的host
$mc->get("fffffff");

执行该PHP脚本,发现报了Segmentation fault错误,为啥?

使用gdb跟踪程序,找到了报错的代码:
libmemcached-0.44/libmemcached/connect.c:line400

if ((ptr->fd= socket(use->ai_family,
                     use->ai_socktype,
                     use->ai_protocol)) < 0)
{
  ptr->cached_errno= get_socket_errno();
  WATCHPOINT_ERRNO(get_socket_errno());
  return MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE;
}
Segmentation 说明错误是非法存取内存区域,可以判断use的某个元素为NULL(PS:由于编译优化,gdb无法打印详细的值,这块等以后有空在检查了)


翻查了一下php关于memcahed的介绍,也找到了问题所在(http://php.net/manual/zh/memcached.requirements.php


说说我PHP的环境配置吧,也最终确认了问题所在。PHP官网上已经说明了,memcached扩展,必须使用libmemcached大于1.0的版本。(PS:这里插一句,如果使用的是memcache扩展,不会出现改问题,原因是memcache扩展使用的是libmemcache系统库) 

PHP版本libmemcached版本是否出现问题
5.2.14libmemcached-0.44
5.4.41libmemcached-1.0.18

总结:环境配置,按照官方说明配置,并编写文档规范。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值