个人项目:记一次服务器高负载、CPU100%问题排查以及解决方案
这个项目是我开发的一个校园号卡分销系统,按年授权提供给各大高校的营业厅老板使用。
没想到流量超乎我的预设,中途服务器进行了多次扩容,不然根本无法承受的访问。收的他们年授权费用也亏了,明年得涨价😁,总之这个项目是亏本了,收的钱少了。
今天一大早收到负载告警。
这个问题过年期间一直存在,一开始以为是资源过多,因为确实加载了很多图片以及其他静态资源。
当时登录上可视化Linux面板,先看看服务监控,看到区别于往日的上下行流量,下意识的判断是静态资源过多,于是把静态资源全部放到一个单独的语速下并使用CDN配置缓存时间,当时流量确实有减少,但问题并没有解决,因为我并没有发现问题的真正所在,再一个过年,好多事要忙,也没空去继续管了,因为CPU负载也没有100%了,好歹系统能正常访问了。
没想到这个月又出现这种问题,于是我心想,可能是其他问题,也许网站程序或者服务器配置出错了。
暴露出来的特征:CPU 100%、上下行流量不正常。
先分析服务器网络流量,发现是正常的。
再看看CPU占用是怎么回事。
发现是Redis在大量占用。
那么可能是网站程序在不恰当的使用Redis,查看网站日志,找到对应URL。
找到对应的代码。
输出数据后发现有数千条,那这样就知道了。
每个用户访问都会使用Redis查询数千条数据,能不卡才怪。上下翻了下代码,当时为什么要这么写,原来本来设置一分钟的缓存时间错误的设置成了24小时,所以查询的数据量巨大。
问题,搞定!
好习惯:处理完问题之后,服务器防火墙关闭SHS端口哦。🤪
(文中出于安全考虑,只展示关键截图,可能影响系统安全的因素均不予展示)