目前我们的非持久化缓存服务器(memcached)与持久化缓存服务器(nosql)用的都是Couchbase(前身是Membase)。
之前每次出故障时,阿里云总是拿nosql服务器说事,因为nosql服务器的CPU占用的确不正常。
上图是Linux中top命令运行的结果。问题表现为,Couchbase总是只用一个CPU核跑memcached进程(nosql中也用到了memcached),CPU几乎跑满,而nosql服务器实际有4个核。1个核累得要死,而其他3个核闲得蛋疼,这的确是不正常的情况,会造成有些情况下读取缓存速度慢。阿里云对它的怀疑有一定的道理。
后来,我们通过日志记录了nosql服务器的读取数据耗时,得到的数据是超过400ms的nosql读取1天发生100多次,相对于每天超过100万的读取次数,这个问题影响不大。
但是,阿里云还是每次拿它说事,我们都厌烦了。今天又提到了,我们实在受不了了,怎么办?只有找出问题的真正原因,才能摆脱它。
对于Couchbase CPU占用高的问题,我们在4月份研究过,当时用的是Couchbase 2.0。我们在Couchbase官方论坛的一篇帖子(High cpu usage in memcached process (couchbase 2.0))中知道了Couchbase 2.0存在CPU占用高的bug,但在Couchbase 2.0.1中已经修复了。于是,我们将Couchbase升级到了2.0.1,以为问题解决了。后来发现还是会出现CPU占用高的情况,以为是其他原因引起的。
今天,我们在Couchbase官方论坛(High cpu memcached process)中找到答案(6楼的回答):
The fix caused a performance regression and was backed out at the last minute. At the time I made that comment the fix was in the 2.0.1 branch. We are fixing it for 2.0.2 though. I apologize for the misleading comment.
原来是Couchbase给大家开了一个玩笑,这个bug在2.0.1中并没有被修复,要等到2.0.2。
好了,终于找到了问题的真正原因(nosql服务器CPU占用高的原因,不是之前故障的原因),这下清静了,这下放心了。