很是抱歉,昨天的服务器CPU 100%问题是达到 memcached 的链接数限制引发的,不是阿里云服务器的问题。html
以前咱们用的是阿里云“云数据库 memcached 版”,上个周末咱们换成了本身搭建——基于阿里云“内存网络加强型”服务器用 docker 跑 memcached 。web
docker run -d --net=host --restart unless-stopped memcached -m 15360
但咱们在部署 memcached 时没有设置 conn-limit 参数(默认值是 1024) 。docker
因为周一周二两天服务器没出现问题,并且周二的访问量超过了上周的最高,咱们误觉得此次 memcached 的部署调整没问题。而没问题的背后是由于周一周二的web服务器数量比昨天少,恰好没达到 memcached 的链接数限制。数据库
昨天(周三)咱们收到 1 台服务器的 CPU 报警后,多加了 1 台服务器,恰好让 memcached 的链接数达到了临界值,在下午并发链接数上去后,很容易触发 memcached 的链接限制,web 服务器因没法使用缓存而让 CPU 不堪重负。在这样的状况下,减服务器反而是有利的,而咱们慌乱之下依照 CPU 负载高就加服务器的错误直觉操做则是雪上加霜。。。缓存
当今天上午再次有服务器出现 CPU 100% 问题时,咱们才想到 memcached 的链接数限制服务器
STAT max_connections 1024 STAT curr_connections 960
赶忙将 max_connections 由默认的 1024 修改成 2048网络
docker run -d --net=host --restart unless-stopped memcached -m 15360 -c 2048 && docker stop 51bd3b240ede
以后 CPU 100% 的问题就解决了并发
STAT max_connections 2048 STAT curr_connections 1232
很是抱歉,因为咱们在处理故障时不够冷静、考虑不周,给您带来了麻烦,请您谅解。less
咱们会吸收教训,提升咱们在处理故障时的判断与定位能力。memcached