记录技术收获,分享个人心得

人生如负重远行,不可急于求成

网站访问慢的分析流程

    作为技术人员,如果问我最怕排查哪类网站问题,不是网站打不开,而是打开慢。因为打开慢的原因实在太多了,并且可能无法彻底解决,不过我们可以通过一系列的排查来推测出网站打开慢的原因。
在长期的工作实践中,我总结出以下一些常见的网站打开慢的问题,以及排查方式。
首先将网站的访问过程分为三部分,以及一些细类
1、响应时间
(1)dns解析域名 (2)连接建立
2、执行时间
(1)服务器响应 (2)程序代码执行 (3)数据库连接和查询语句
3、加载时间
(1)图片,js,css,视频等的加载 (2)站外链接加载

《网站访问慢的分析流程》

我做了一张流程图来展示访问的各个阶段情况,其中最可能影响打开速度的部分用了绿色标签标注

1、响应时间
(1)dns解析域名
结合我们之前介绍的ping命令,如果有一天,你ping一个域名然后过了几秒dns才返回出结果,这就会导致打开速度在一开始就延迟一大块,我这里修改了本机dns为一个遥远的国外dns,然后随便ping了一个地址,类似下图这种半天都没有返回是否解析成功的,就是dns的解析很慢。

《网站访问慢的分析流程》

总结:结合实际生产环境,这个问题只是可能存在,但是很小几率会因为这个问题影响网站的访问速度。是几乎可以忽略的一项指标。最为常见的情况就是本地dns出问题了。

解决方法:修改本机dns或联系本地网络运营商(电信、联通、移动)调整
影响指数:★☆☆☆☆ 1星
(2)建立链接
这个环节就大有问题了,当我们获取到服务器IP后,客户端和服务器建立连接,这个链接的速度与质量取决于线路的优劣。最常见的问题就是跨线路访问,地理位置相差很远的访问,中继网络异常等。排查方法:依然是经典的ping
如果ping一个网址,存在大量丢包或者很高延迟,就会导致访问的连接线路异常,比如我们随便找了一个海外网站,类似这种高延迟+丢包的情况。打开怎么能不慢呢。推荐命令:ping 域名 -t(-t表示一直ping下去)一般国内的ping延迟在50ms以内都正常,国内ping美国,好的情况180ms,差的220ms以上

《网站访问慢的分析流程》

上次有网友留言,要是网站禁ping了怎么办?问的很好,这里我推荐使用tcping测试端口(该命令所需软件需要下载:www.gaoshan.me/download/soft/tcping.exe,然后添加到系统环境变量中)

《网站访问慢的分析流程》

总结:一个非常常见的访问慢原因,并且很难从根本解决,最常见的就是国内访问美国线路,香港线路,移动网络访问电信线路。与访客和服务器的地理位置有关系。

解决办法:很难解决,可通过cdn加速,如果是线路短暂的不稳定,可等待线路调整,或尝试重启路由光猫,但是不一定有效
影响指数:★★★☆☆ 3星
2、执行时间
(1)服务器响应 
当一个服务器健康运行,这个时间几乎可忽略,但是如果服务器不那么健康,咳咳.. 我这里的健康是指服务器内的资源使用情况,CPU,内存,磁盘IOPS,带宽,只要一个达到瓶颈的服务器就是亚健康,将直接影响访问速度。
排查方法:
在确保网络无问题的情况下,云主机可以查看内部资源使用(推荐使用zabbix等对各项资源做监控),虚拟主机则可以执行一些简单的命令,或者直接访问网站的图片,如果打开很慢,则需要检查服务器资源使用。
总结:一个最直接的访问慢问题,如果一直很快的网站,突然慢了,则应该首先检查该问题!
影响指数:★★★★☆ 4星
(2)程序执行
一个说大不大,说小不小的问题,一旦发生,将会导致打开很慢,常见于程序死循环,数据库死锁等,这里发一个工作中遇到的笑话,懂得程序员朋友就懂了

《网站访问慢的分析流程》

排查方法:这还真不好排查,要辛苦各位程序员朋友调试了。常见的比如wordpress程序,执行就很慢,推荐可安装缓存插件如wp super cache或者wp fast cache,将动态页面静态化。

总结:一个难以排查的问题,一旦出现会严重影响访问速度,不过平时遇到的不是很多
影响指数:★★☆☆☆ 2星
(3)数据库
其实也应该归类到程序里,但是这里我单独拿出来讲一下,因为经常遇到,并且这类问题很隐晦,不好排查。最常见的问题有两个,一是程序连接了外部数据库(比如数据库和网站代码不在一个机房),二是查询语句执行很慢(比如一次性读取过多的数据)
排查方法:
a、检查程序数据库连接字符串,最佳的方式是数据库与主机使用内网ip或者localhost连接,如果是公网,请务必确认是同机房!
b、又要辛苦dba程序员朋友了,mysql建议开启慢日志或者通过数据库root帐号登录,使用show full processlist;获取到正在执行的查询语句,对其进行explain分析

《网站访问慢的分析流程》

比如这种单个查询的rows(行数)达到20万行的语句,能不慢吗?优化方式是建立索引,牺牲空间换时间。

对于sqlserver,可使用自带的活动监视器,可查看到cpu使用高以及耗时高的语句进行优化,方式和mysql类似

《网站访问慢的分析流程》

总结:一个容易被忽视的问题,我认为是大部分程序执行慢的罪魁祸首,但是因为不常出现,并且具有很高的程序特异性,所以不会特别典型,姑且算3星,从硬件上提升的话建议升级SSD固态硬盘,对该问题有较大帮助。

影响指数:★★★☆☆ 3星
3、加载时间
终于说到这里了(呼),这就是我认为最大的一个访问慢的因素。当用户访问一个网站时候,服务器会向客户端发送大量的内容,这会占用大量的服务器带宽。带宽就是最常见也是最直接影响打开的因素。
很多朋友可能搞不太清楚带宽到底怎么算,这里科普一下,我以一个10M(兆)带宽的服务器为例
带宽换算成我们平时最直观的速率,是有一个公式的,大约为:
(带宽*1000)÷8
比如10M的带宽转换成速率就是10M*1000 / 8=1.25 m/s 
再比如5M的带宽转换成速率就是5M*1000 / 8=625 kb/s

有兴趣的朋友可以查资料了解下为什么需要除以8,这一点大家结合家庭带宽表现能明白了。服务器的带宽,也是一样的。这里是粗略计算,如果精确计算10Mbps=10 000kbps=10 000 000bps(bps明确定义byte per second,也就是一秒10 000 000byte)
然后进行计算,10 000 000÷8=1 250 000B
1 250 000B=1221KB=1.19MB/s

如果是常见的家庭带宽100M,那么峰值的精确速度就是11.9M/s,我们在用BT类软件下载东西时候就会发现,速度不会高于11.9M/s
了解上述知识后,我们隆重介绍排查网站加载速度的第一工具,F12,没错就是键盘上的F12按键!
排查方式:当我们在任意浏览器打开网站后,按下键盘上的F12按键,会出来如下图的一个工具栏,一般在浏览器底部

《网站访问慢的分析流程》

这时候切换到“Network”栏,可以勾选“Disable cache”或者按CTRL+F5 刷新页面,会将重新加载整个网页,并且不使用缓存。这时候各个加载项就会一一展示在下方了

《网站访问慢的分析流程》

我们可以清晰的看到每个文件的加载时间,如果有特别长时间加载不出来的就是有问题的,另外下面会列出总的网页大小和请求资源数量,比如我的博客首次打开大概是3M的大小,我本地的带宽是100M,那么理论访问速度就是3M除以1.25M/s=2.4s,大概符合我们测试结果2.00秒。注意当服务器带宽低于本地带宽时候。就要以网页大小除以服务器带宽速率。比如我的服务器带宽只有3M(速率375kb/s),那么要加载完这3M就需3*1024/375约为8.1秒。

加载的常见异常情况如下:
a、网站中的坏链:404地址,会导致持续加载不出(会在资源中以红色出现)
b、外链地址:调用的外部网站地址,加载外链很慢导致网站整体加载慢(非常常见,一般在time栏时间长达几秒的),比如一些网站调用了谷歌的字体,因为谷歌在国内打不开,导致网站一直加载不出字体。
c、大文件:很多站长直接将单反原图放在网站首页,哇,哪一张就是10几M,这加载速度..不提了,建议优化图片大小!单张图片不建议超过200kb。
总结:一个最明显,最大影响访问速度的因素,可以比较直接的说带宽越高访问速度越快。优化建议:
a、定期检查网站加载项,删除修复其中的坏链,外链建议修改成程序本地调用,减少加载项数量(截图中的requests项)
b、压缩网站首页大小,我推荐首页越小越好,一般应该控制在3M内,这样能同时间承受更大的访问量,访问速度也更快

c、提升服务器带宽(我司虚拟主机单台服务器带宽可都是1000M的哦)

影响指数:★★★★★ 5星

另外值得一提的是,如果F12发现首页代码执行很久(在Waiting (TTFB)项中),这种极有可能是程序代码执行或者数据库查询语句问题。《网站访问慢的分析流程》


点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

hi~

你好,欢迎来到我的博客,欢迎留言。

快速搜索:





Generic selectors

Exact matches only


Search in title


Search in content



Search in posts


Search in pages

欢迎关注我:

微博
steam
网易云音乐
QQ
500px

常用命令:

http://www.gaoshan.me/cmd