magent cpu使用率100%

继续上一篇文章 http://www.yfan.me/949.html
搭建完magent和memcached 分布式高可用集群后发现。 magent的有一个严重的bug。
在set key 值第二次失败,而且magnet的cpu使用率会跑到100%。
伟大谷歌讨论组解决这问题

https://code.google.com/p/memagent/issues/detail?id=4

关于 0.6 版本,set key 值第二次失败问题;
这个问题的关键点在于作者写 pool_server_handler 用意;
搭建环境多次启停主数据服务器(memcached)和备份服务器(memcached);该部分源码均未被调用;该事件也未被触发;
同时因为s->sfd对应的事件机制上add了pool_server_handler的read触发条件;
影响了s->sfd接收下次set key 命令;

提供一种解决方法:
注释掉 函数 static void pool_server_handler(const int fd,const short which, void* argv);
注释掉 put_server_into_pool(void *s) 中:
event_del(&(s->ev)); /*注意保留*/
/*
event_set(&(s->ev), s->sfd, EV_READ|EV_PERSIST, pool_server_handler, (void *) s);
event_add(&(s->ev), 0);
*/

从 pool_server_handler 源码分析可知;
pool_server_handler 功能是用来当memcached服务器断链时,清理matrix->pool中对应的server(s->sfd)的;
若不清理,matrix->used对应的可用fd持续增加;
pool_server_handler 通过 read memcached服务器发送报文来判断server对应fd是否可用:
这个问题或许可以通过修订源码来解决,非通过事件处理方式来解决;