记一次诡异的php-fpm吃满CPU事件
一切的开始
昨天上午,我如往常一般坐在办公室电脑前,开始备份代码并准备上线新版本
备份完毕,上传代码,看起来一切都很顺利。更新完毕!
The bomb has been planted!
打开官网看看效果。诶怎么一直转圈圈,好慢哦,公司网络又抽风了?
打开微博,一切正常啊。再次打开官网,还是一直转圈圈。尝试用手机和同事电脑,都无法打开官网,顿时我就懵逼了
赶紧从备份中恢复,再试,还是打不开,卧槽,药丸药丸
《21天学通拆弹》
打开日志,没有新的错误被记录
top
一下,卧槽CPU炸了,仅仅几个php-fpm
就榨干了CPU。IO负载倒是低得很
仔细回想,代码中并没有什么地方需要占用大量的CPU资源啊,就算是不慎导致代码死循环了,也不至于那么多个进程一起死了吧?
重启php-fom
,不到一会儿又100%,这TM就很尴尬了
论菜鸟的自我修养
赶紧请来技术大佬开慧哥给看看情况。只见开慧哥芊芊玉指在键盘上翻飞,各种我来不及看或者看不懂的代码如行云流水般出现在屏幕上,一阵噼里啪啦过后,成功开启慢查日志,我仿佛看到开慧哥那宽大光滑的额头散发出了希望的曙光。
选答题:请问上面的自然段中出现了多少种修辞手法?分别是什么?
红 || 蓝 ?
日志显示,问题出在Session
类的flock
函数。文件锁有问题?不应该啊IO负载明明低得一逼。至此官网已故障20多分钟,本着可用性至上的原则,准备先把Session迁移到Memcache上再说。因为Session类自带Memcache驱动,简单配置即可
直接在线上改代码,比背对CT吸大麻还刺激。保存后,打开官网,秒开!
……
然后报了一个错:Class 'Memcached' not found
接触过缓存的人估计都被Memcache
和Memcached
折腾过。服务器上只有Memcache而没有Memcached怎么办?恰好有个一键脚本,几下就把Memcached装好了
再次访问官网,不负众望地再次报错,说找不到connect
方法。看手册得知Memcached应该使用addServer
,于是修改保存,官网顺利打开
凶手竟是!?
刚才安装Memcached时,开慧哥从流瀑般茫茫代码海中似乎发现了一个硬盘空间不足的提示
于是df -hl
之,我一看,哇!(葛平腔)系统盘占用100%
!
虽然从没经历过这样的情况,但我似乎已经知道了flock
的问题所在了……
于是删掉最开始的备份文件,大概就是因为磁盘满了导致文件锁卡住吧
祸 ! Singleton
你以为这就完了?Naive!进行别的操作从Memcache服务端获取数据时又报错
错误信息大概是value too long
一顿Google过后,原来是Memcache和Memcached在存取数组上不兼容导致的,蛋疼,似乎还没有解决方法。想要清空所有缓存吧?flush
方法还被辣鸡腾讯云给禁用了,虽然登上网页后台有个清空功能,但只有15分钟内还有读写操作就不给清空
大概腾讯以为这个设定可以防止误操作很人性化很良心?卧槽企鹅你是智障吗,想防止误操作你不会二次验证吗?非要来个强制时间限制,既然行不通,也只好换个方案了
不兼容,又不能清空,那就只能重新用回Memcache咯。于是准备到php.ini
内启用原本的memcache.so
,一看,诶配置项怎么消失了?一搜,压根就没有memcache.so
文件了
卧槽一键脚本你也太“智能(zhang)”了吧!?让你给装个memcached你装好后顺便连memcache都删了!?
好吧再编译一个memcache,把addServer
改回去,这下总行了吧?
你怎么不上天?
聪明的小朋友们看到这直白的标题,可能已经猜到了……
是的Memcache里缓存的部分数据上天了。如果是一整条一整条数据地丢那还没关系,毕竟缓存不存在的话会自动从数据库读取并缓存起来。蛋疼的是这丢的都是某条数据(数组型)里的某些键,这TM就很尴尬了。经常出现从缓存里读出数据后缺失一些键值导致报错的。辣鸡腾讯又没法清空,只好临时改代码,跳过从缓存读取数据这一步
虽说未来的升级计划有打算将Session移至Memcache中,不过现在还是太乱了,先尽量恢复,后续升级后续再说吧。于是将Session驱动改回文件
至此,网站服务恢复正常
总结
人啊,总是要在扑街之后正确认识到自己扑街的原因才能继续向前嘛
- 磁盘空间被占满后会导致
flock
死锁 flock
死锁会导致php-fpm
占用飙升flock
不够机智,连个错都不报- 并非只有数据库才有慢查日志,
php-fpm
也有 Memcache
与Memcached
至少在连接方式、数组存取上不兼容- 切换使用
Memcache
与Memcached
可能导致数据损坏 - 欢迎小伙伴们踊跃补充~
为什么不用redis
hhhhhhhhhhhhhh
2333
[哼]不明觉厉
夸张:芊芊玉指 翻飞 宽大光滑
比喻:行云流水 希望的曙光
[good]服气
惊悚
选答题hhhh
这问题出的- -!
2333
归根到底是没有升级配置(滑稽
[囧]BUG的话,估计16H都能吃满
被吃满是因为你没有给TX充够钱
给够钱开***服务才是壕无人性,但可保证不伺机