非常抱歉, 昨天的服务器 CPU 100% 问题是达到 memcached 的连接数限制引起的, 不是阿里云服务器的问题
之前我们用的是阿里云云数据库 memcached 版, 上个周末我们换成了自己搭建基于阿里云内存网络增强型服务器用 docker 跑 memcached
docker run -d --net=host --restart unless-stopped memcached -m 15360
但我们在部署 memcached 时没有设置 conn-limit 参数(默认值是 1024)
由于周一周二两天服务器没出现问题, 而且周二的访问量超过了上周的最高, 我们误以为这次 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
非常抱歉, 由于我们在处理故障时不够冷静考虑不周, 给您带来了麻烦, 请您谅解
我们会吸取教训, 提高我们在处理故障时的判断与定位能力
来源: https://www.cnblogs.com/cmt/p/8572862.html