影响memcached性能的事件提醒机制
本文按署名·非商业用途·保持一致授权作者:
,发表于2008年08月28日12时17分
昨天看到一封关于memcached和libevent的邮件,http://lists.danga.com/pipermail/memcached/2003-October/000299.html。2003年的信息,比较老,但是可能对还留恋于古老的linux kernel的朋友有帮助。
memcached是使用libevent作为事件提醒库的,libevent是一个封装了包括poll,epoll,kqueue在内的大多数事件提醒机制的库。libevent可以根据平台环境来选择可用的以及最优的事件提醒机制。
在早些时候的linux(2.4)里,事件提醒是使用poll来完成的,但是有可能是因为libevent的bug,导致memcached在poll下性能很糟糕。在2.5和2.6里,linux开始支持epoll,而2.6的epoll是最为稳定的。而memcached在epoll下表现极佳。所以如果要在基于linux内核的平台部署memcached,我建议使用linux2.6。如果非要在2.4使用memcached,那么需要给kernel打上补丁 ,并rebuild。
要知道memcached使用了哪种时间提醒机制,可以使用这个命令EVENT_SHOW_METHOD=1 ./memcached(EVENT_SHOW_METHOD=1时候libevent会输出它所选用的事件提醒机制)。如果输出的信息里所提到的不是epoll或者kqueue,那么memcached有可能是处于一个比较糟糕的状态。
另外libevent尽量选择1.1或者以上的版本,之前的版本稳定性和支持的消息管理机制都可能不足。

2008-08-28 14:48:51
太专业了,讲点PHP方面的吧。