新项目白天发版部署到生产环境后,到了晚上,大家都发现了一种烦人的情况:oms后台系统,点击其中几个功能页,页面加载变得非常慢,一直转圈圈。
为什么呢?查看生产的log,发现oms服务端每个接口在调用的开始处记日志了。而在走完接口逻辑返回时,并没有打印日志。我们就无从知道接口的duration了。
到底是不是服务端的接口慢呢?用Postman模拟请求,发现很快。
这时,小组里另一个同事说oms并不慢,还录制了屏幕的操作(新冠肺炎疫情下,大家在家办公)发到qq讨论组里。
而我们几个在点击的时候,的确是慢。
后来才发现,原来是有的页面快,有的页面慢,而慢的那几个页面呢,是图片加载的问题。———开发这几个页面的小哥们也发现了————那几个页面查询结果里每一行都要显示两张证件照片,通过F2浏览器调试器发现,加载每一张照片耗时都超长,因为这些图片加载慢导致了整个页面响应也超级超级慢。
【那到底为什么加载图片慢呢?】
这些图片在生产的fastdfs服务器都不存在的,因为生产db的数据是从测试db初始化复制过来的。ie里请求如下fastdfs图片链接:http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/0C/wKgoVF5hucKAQxHcAABJEO8Ld0Y92.JPEG, 浏览器转了半天,结果是 502 Bad Gateway ;ie里请求如下fastdfs图片链接:http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/0B/wKgoVF5hpvmAPXpBAABWI5BcW0Y60.JPEG, 浏览器转了半天,结果是 504 Gateway Time-out 。
然而,我们通过前端上传一张图片到fastdfs服务器,这时,在ie里访问这个图片链接 http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/02/CgAC3V5iPMaAD1c-AAAUQnWiKAg69.JPEG ,浏览器响应很快。
那么,难道图片不存在,响应就会很慢吗?修改上面那张已存在的图片的名字,比如改成 http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/02/gAC3V5iPMaAD1c-AAAUQnWiKAg.JPEG ,虽然图片也不存在,但是很快就能收到404的响应。
那么,跟前面的fastdfs路径有关系吗?来回调换,也没什么规律。
不懂为什么那些原本不存在的照片那么慢!想知道原因,得分析fastdfs源码了吧,也许跟Nginx配置有关系。
附上以下情况:
-- 1. 原本在fastdfs上不存在的。响应码 50x
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/0C/wKgoVF5hucKAQxHcAABJEO8Ld0Y92.JPEG
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/0B/wKgoVF5hpvmAPXpBAABWI5BcW0Y60.JPEG
-- 2. 新上传到fastdfs上的
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/02/CgAC3V5iPMaAD1c-AAAUQnWiKAg69.JPEG
-- 3. 基于上面两种,拼出来的下面的url
-- 3.1 很快响应400 Bad Request
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/02/gAC3V5iPMaAD1c-AAAUQnWiKAg.JPEG
-- 3.2 响应很慢 502 Bad Gateway
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/02/wKgoVF5hucKAQxHcAABJEO8Ld0Y92.JPEG
-- 3.3 很快响应404
http://oms.boss.shenbianhui.cn/fimage/group1/M00/00/0C/CgAC3V5iPMaAD1c-AAAUQnWiKAg69.JPEG
结束!