日前博主遇到了一个或大或小的问题,在恢复博客后运行了2个月左右出现了间歇性的Waiting时间过长,其实对大多数人来讲这其实是一件小事情,除非站点无法访问或此值过大,不然根本都不会注意到这个细节,但是博主身为一个强迫症可谓是非常的难受了(说出来你可能不信,几十毫秒的跌落差在博主看来简直能要了老命),总得想办法解决。看了下在度娘谷歌上对于此项的文章过于少,也得不到一个确切的结论与参考优化方向,于是只能从简单的排除法入手,几经排查之后得出几点可能是问题的问题(这句话好像有点奇怪),在这里总结一下小白见解提供给有需要的同学作为不靠谱的参考。
首先简单阐述一下什么是Waiting(TTFB)时间(也可以度娘谷歌啦)。在WEB系统中,TTFB是客户端接收到服务器发送的首字节时间,换句话说就是当你向某个服务器发送请求后,服务器从接收请求到查询处理数据并完成页面渲染之后再发送给你,在你收到数据之前,这段时间被称为TTFB。既然知道了这一点,那么动态网页TTFB过长大概率是发生在服务器端的问题。
废话不多说,下面直接列出博主认为可能导致TTFB过长的问题。博主使用的是LNMP架构,非本架构或静态网页不确定以下内容是否可解但也可作为线性参考。
客户端到服务端的网络质量(重点)。
这个不用多说大家都清楚,如果网络间接性抽风或者一直高Ping,那么你服务器优化的再好数据处理的再快也是白搭。
服务端的软硬件关联性能。
CPU与内存:
其实这点涉及到非常多的关联性,例如你CPU是8c但是内存只有1g那么处理数据必然是很快,但是并发访问量一旦激增出现内存不足的情况Waiting必然也低不了甚至会出现服务器宕机的情况,反之亦然。不过只要网站访问秒并发不过10,就算1c1g也是不会有太大问题的,劣质服务器的共享核心除外。CPU过低反应到软件上会造成PHP处理数据渲染页面过慢,从而导致TTFB过长。
可以尝试安装opcache这类PHP语句缓存插件进行加速,当然这个也是线性关联的,如果你CPU性能差到令人发指,装什么缓存插件也不会让你的速度得到质的提升,还是要回到源头解决问题才行。
磁盘io:
如果你不是托管或者自建服务器,那么恭喜你,这可能是你TTFB过长的一个主要问题所在,基本上所有的VPS提供商都会限制你的磁盘io(HDD、SSD无一例外,当然SSDio必然更高,限制也相对宽松),甚至是共用一个磁盘区或者超标分配io,如果你的内存不够大数据库没有足够的缓存区将热数据放在内存,那么超出部分每次查询都会从磁盘进行,如果在服务商集群负载高峰期,这将给磁盘男上加男,从而因磁盘io爆满造成数据库查询缓慢导致TTFB过长。这里引出一个间接影响磁盘io过慢的原因-日志,默认情况下Nginx、SQL、PHP都是会打开日志的,只要访问一次站点就会写入几次甚至十几次日志,如果某个单位时间内站点被大量访问,日志将会消耗大量的磁盘io。
条件允许的情况下可以增大内存容量,尝试关闭Nginx的错误日志、站点访问日志、数据库错误日志、PHP错误日志等等...,或者将日志写入内存缓存区,数据库的缓存区尽可能的大但也得注意内存阈值,不要超标分配。
分析至此博主通过关闭非必要日志(清理前日志总共占用了接近2个G!)及增大数据库缓存顺利解决间歇性Waiting过长的问题,肯定还有没有涉及到的问题待后续再做补充!
#(脸红)
#(邪恶)
鸽鸽鸽
咕咕咕
全部试了个遍 我站估计无解了@(泪)
哦豁,你不是没开缓存么。