【运筹帷幄】网站打开慢故障排查思路

大家好,我是高胜寒,本文是【运筹帷幄】系列的的第1讲,【运筹帷幄】系列主要讨论在公司中经常遇到的那些棘手问题,带你一起打怪升级,系统的阐述解决问题的思路和方法。

运筹帷幄之中,决胜千里之外,我是高胜寒,今天我们一起聊聊网站打不开以及网站访问慢的故障处理方案。

前言

我们思考一个问题之前,先要考虑的是解决问题的思路,但解决问题的思路一般需要对一个系统或者产品有足够的认识才可以。

所以我一直给大家强调的知识体系,包括访问网站的详细流程,其实都是在解决遇到问题如何去思考的问题。

想知道为什么网站打开慢,或者无法访问,我们得先清楚一个网站的访问流程到底是什么样子。

网站访问流程(故事版)

我们的主角小王,是个活雷锋,哪里需要哪里搬,今天他又来了。

小王打开了自己的百度浏览器,输入www.baidu.com,按下回车,等了一会,就打开了网页,小王很困惑,在敲下回车的一瞬间,电脑到底做了什么?

为了一探究竟,小王打开百宝箱,并念出了那句开启百宝箱的咒语(我是高胜寒,关注我,有更多精彩内容哦)。百宝箱闪出一个耀眼光芒,小王眼前一黑,过了好一会儿小王醒才过来,醒过来后发现自己被困在了电脑里,一个美女正在电脑前跟闺蜜聊着天。突然美女像是想起了什么,她飞快的打开浏览器,输入了www.taobao.com

小王的身体突然就不听使唤,直奔电脑的host文件飞去, 小王这才明白,百宝箱把自己变成了一个用户请求,根据请求的处理流程,小王飞快的看了一眼host,发现文件中已经有www.taobao.com对应的ip地址,于是获取到ip,直接扔给了美女,美女很开心的购起物来。

小王正要好好欣赏一下眼前的美人,QQ上一个消息弹出,是一个不常见的网址,www.wsmv.com 美女想也没想,直接打开, 小王立即赶往host查看网址对应的ip,结果发现host里没有对应的ip。小王心想,这应该是美女第一次打开这个网站,所以电脑里没有缓存。

既然在host里没有找到,小王赶紧询问了下周边忙碌的其他请求,接下来该怎么办,一个看上去很老成的nginx请求路过,指了指旁边的路由器(在你的城市的某个角落,但是不会太远)说,“诺,那个是本地域名服务器,你去向他寻求帮助吧”

小王飞奔过去,向本地DNS服务器询问是否有刚刚美女输入的网址的ip, 本地DNS快速扫描了下,发现没有,但给出了提示,可以去根服务器去问问。

小王来到根服务器,小王问,有没有www.wsmv.com对应的ip, 根域缓缓的答道,“我这边没有,但是我有.com.的服务器地址,你可以去问问他”,说着根域服务器甩出了 一条信息,上面写在.com服务器的ip地址。

小王又马不停蹄的根据ip找到对应的.com服务器,询问是否有美女输入的网站ip的地址, .com服务器头也没擡的回了一句:“又是根域让你来的吧,我这边有wsnv.com对应的ip地址,你可以直接去,但是我们这有个不成文的规定,不是所有人都可以随便访问服务器的,IP给你,接下来能不能请求到资源还得靠你自己”

小王拿到了 wsnv.com的ip地址正要进去获取数据,却被一个叫TCP协议挡住了去路。小王知道这是要进行TCP连接了, 需要与服务器进行三次对话,跟对暗号一样,通过后才能获取数据。

但是要进行TCP连接,小王得先把消息成功的发送到服务器上,小王根据书中讲的准备了IP协议,ARP协议和OSPF协议, IP地址只指定了美女的PC的ip和刚从.com获得的要登陆网站的ip地址, 然后经过一个个路由器传送给服务器,然后进行了tcp的链接。

连接成功了,小王兴奋的跳了起来,能给美女获取到数据是小王最开心的事情。 but,小王听到一个声音 “恭喜你,成功跟tcp进行了链接,现在你可以寻求HTTP协议的帮助来请求网页了,请先熟悉HTTP协议的请求规则”

小王赶紧查看HTTP请求规则,规则里有条重要提示: 虽然你通过了tcp协议,但是还是有被服务器拒绝的可能,如果服务器拒绝了你的请求会返回"Forbiden",如果服务器没有拒绝,能够正常访问,就返回200OK,然后才会给你传输数据。

小王连忙根据规则发送HTTP请求报文给服务器,经过了硬件防火墙,到了负载均衡,又通过负载均衡到了web,后面又有缓存,最后才到数据库。成功了,小王收到了服务器的回复,接收到一堆HTML形式的文本。然后快速返回到美女的电脑,当然也没忘了在本地缓存上存一份,毕竟下次再按这个流程走一遍,小王会累死的。

在本地缓存好之后,小王把接收的文本给了浏览器,浏览器是个聪明的家伙,很快就翻译出来,并渲染到屏幕上,看到屏幕前美女开心的笑容,小王感觉好满足,顺便瞅了一眼浏览器,不看不要紧,一看吓一跳,浏览器上是美女男朋友发来的礼物,满屏的烟花和一句我爱你。

小王的心突然疼了一下,原来有男朋友啊,那我这还忙活的这么起劲,算了,百宝箱带我回去吧。

随着一阵耀眼的光芒,小王最后看了一眼美女,恋恋不舍的离开了。

小王回来后,快速整理了今天的见闻,爱学习的小王在笔记本上写到:美女(此处划掉)

小王又重新写到: 用户发起一个请求到最终落地数据,中间经历了:

用户(电脑,网络,本地缓存)–域名服务器–tcp三次握手 --HTTP协议

进入了HTTP协议之后,小王回忆了下,先是看到了硬件防火墙F5,然后是请求发给了负载均衡nginx, nginx转发给了其中的tomcat,tomcat有相应的配置文件,根据配置文件搜索相应的资源-好像在获取资源的时候还遇到了缓存redis,然后才是访问数据库,这一圈下来好麻烦。

既然知道了整个的访问流程,我们接下来要看看如何排查网站访问慢问题:

如何排查问题

如果客户说访问web网站慢
  • 主动访问web网站,看是否访问慢,使用公司的远程服务器访问网站看是否会有慢的情况。
  • 如果并没有慢的情况,说明是客户那边的网络有问题
    可以使用ping命令,检查A网站的IP连通性,如果丢包严重,访问速率也会变低。
如果你访问网站发现的确访问速度很慢,这时候你需要排查网站慢的原因
1) 检查网站服务器是否异常
   - 检查服务器的cpu,内存,io,磁盘,网络的使用情况
   -  检查是否有某个进程占用资源比较多的情况
   - 检查是否有恶意访问造成的消耗资源比较多的情况
2) 检查与网站相关联的服务是否异常

a) 网站与数据库的连接是否变慢

可以 在数据库里查看负载,查看慢查询
在这里插入图片描述

在这里插入图片描述
目前关闭的,我们需要开启profiling

mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

获取某一个query_ID在执行过程中的profile
在这里插入图片描述
在这里插入图片描述

b) 网站与存储的访问是否变慢
c) 查看负载均衡到web是否变慢
d) 在web网站上放一个静态网页/php动态查看是动态数据慢还是静态数据慢

3) 使用chrome浏览器开发者工具排查网站打开慢的情况

a. 打开谷歌浏览器,键盘上输入F12,打开开发者工具
在这里插入图片描述

b. 选择【network】-ctrl+F5 强制刷新,查看资源的加载情况

点击time进行排序,会找到消耗时间最长的资源
在这里插入图片描述

其他可能的原因

  1. 遭遇流量攻击,比如DDos, CC攻击,这种只能用带宽去抗,或者采购流量清洗服务,也可以使用CDN服务隐藏源站IP。

  2. 域名问题,比如域名解析不正常,过期。

  3. 死链问题,网站改版或者升级后,残留下来的不存在的页面,而这些页面又被百度给收录了,用户通过这些页面登陆会出现空白或者打不开。 我们可以将死链加入404文件并提交给百度站长平台。

  4. 图片太多也会导致网站速度过慢,解决方案就是使用图床,或者使用类似阿里云的OSS,集中存储图片。

  5. 访问量过高,并发过大,也会导致服务器卡顿,这个时候可以考虑加缓存或增加服务器。

  6. 程序问题,网站存在大量的js调用, 解决方法就是充分利用服务器端的缓存设置和浏览器端的缓存设置。

总结

网站打开慢的原因有很多,并没有标准的答案,所有可能出现瓶颈的地方,都有可能是网站访问慢的原因。

但总结下来,无非就是,网络问题: 系统问题,数据库问题, 访问慢的服务器与其他关联的服务器或者服务的调用之间出现了问题,被攻击。

问题就是机遇,我是高胜寒,一个在教培行业不忘初心的人。 我们下篇文章见!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章