记生产环境响应空白页面BUG
文章目录
【注意】最后更新于 4年前,文中内容可能已过时,请谨慎使用。
场景
今日下午5点左右,发版后进行常规测试发现,首次打开页面空白问题,再次刷新就又恢复正常,打开谷歌浏览器调试窗口看 Console 也没有任何错误,再看 Network 有请求,响应状态也是 200 但是没有响应内容,而且不往下加载。咦!为啥就没有响应内容呢?再次刷新为啥就又好了呢?这种现象不是只有首页,而是几乎每一个页面,这是为啥子呢?带着这个问题我就上路了。
排查
遇事不要慌,作为一个情场老手,Oh 不,职场老手,这个小小事情还能卡 over不住,who 怕 who,接下来一顿猛如虎操作:
1、查看项目运行日志(Laravel 项目 storage/logs/ 目录下日志文件),无异常堆栈。 2、查看php-fpm 错误日志,无错误记录 3、查看 Nginx 日志,无有用线索
一顿操作下来,一根毛毛也没有发现,喝杯水压压惊。
继续
冷静一想。虽没有找到一手线索,先上测试服(我们的代号:Tiger)上测一下,
木问题呀,完全正常访问,这就有点奇了怪额(事出有因必有妖),就在这百思不得的时候,一位后端同事(George)说:是不是生产上一台服务器出问题了?
哎呦,我得个老天爷,这话给我整的一激灵,这里补一下我们的 C端架构,采用了 2台ECS + 一台负载均衡器,使用轮训加权算法将流量均衡的分配到这两台服务器。
不要停
果断登录阿里云,从负载均衡器上摘掉一台服务器,握了一棵草,网站好了,这下就得解了,这台被下掉的 ECS 有毛病,接下来我就想到了发布 Log 信息,这里再补充一下:我们使用的是 Gitlab CI/CD 做持续集成与部署,打一个 Tag 点一下按钮就可以同时发布当前 Tag 版本代码,到这两台服务器,如果这台机子有问题,那一定会在发布 Log 中体现出来,进过查看木毛病,两台一毛一样的执行流程与 log 信息,deploy log 结尾也是 success,再喝一杯水压压惊。
再摸查
发布环节没有问题,那这台服务器上面的代码为啥就不好了呢?带着这个问题,我 ssh 上,又是一顿猛如虎的断点操作,最终定位在 laravel 的这个 view() 函数上,为啥这个函数就不能正确渲染后响应了呢?George 也进行了测试,发现单独创建一个 test.balde.php 简单写了句 hello,没问题,可以有响应。但是一到正经页面就为啥不吐出内容了呢?也不抛错?这….
再思考
我们的项目异常告警是使用的 Sentry,如果有错误 sentry 已经也会有体现,带着这个想法我就又上路了。
Warning: file_put_contents(): Only 0 of 14 bytes written, possibly out of free disk space
文章作者 BING
上次更新 2020-09-23