网站访问过慢原因排查几点考虑
基于我们团队现在业务还在处于比较初期的阶段。访问量并不大,性能问题就成了一个重要但是不紧急的任务。
我而目前主要在发布、监控自动化、可视化。尽可能减少人为操作的问题上努力。
最近深圳那边同事说服务器有点问题,主要是网站访问缓慢,叫如果有空帮忙看看。
我09年左右就开始运营自己的小网站,可以说也是经历过很多这类问题的排查。
也遇过很多奇葩的问题导致网站访问过慢,甚至打不开的情况,但是从未记录下来。
所以,打算开一篇博文记录一下,一方面当做一种笔记,一方面也帮助自己理清一下整个流程。
是哪个环节导致的问题?
很多时候我们习惯访问一慢,就往服务器上看。看看是不是服务器出什么问题了。
其实,在访问网站的过程,任何一个环节都可能会出问题。
但是,最为常见的原因无非以下几种。
website slowness troubleshooting
往大来分类
自己电脑->网络运营商->DNS->主机服务商->服务器
而前面几个大多时候是我们不可控的。除了选择的时候 :D 但是,也得在我们考虑范围内,否则有时候可能白忙碌一场。
抛开不可控的因素,服务器上发生的所有一切才是我们最为关心的。
常见外在因素
1. 遭受攻击
这个问题,其实攻击都是有成本的,如果没有业务冲突,规模不大,很多时候是没人闲的蛋疼跑去攻击你。这个大多情况都是可以被排除的。
- 常见攻击
- DDoS、RDDoS 拒绝服务攻击
- WebCC
这两个其实还是比较简单粗暴的。这个的防护,小规模的,现在很多大的云主机商多少都提供了这类的防护。节点少的,尽可能隐藏自己的源IP可以少很多麻烦
大规模的攻击,基本都是要上升到讨论成本的东西,软硬件防护,多节点,负载均衡等杂七杂八的,增加自己的成本,提高攻击者的攻击成本。
一些服务器上做的配置防护,在这类分布式多IP的大规模攻击下,效果微乎其微。
2.访问量过大
整个对于大多网站来说,是喜闻乐见的。不过这些访问,不单单包括自然访问,还有一些非自然访问量。
- 自然访客
- 搜索引擎/爬虫/采集器的蜘蛛 (一些网站被采集器爬到到整个网站访问缓慢也是挺常见的)
- 一些无目的的攻击扫描等
常见内在因素
根据木桶原理,任何一个短板,都有可能导致整个服务流程出现缓慢。
1.基础服务-硬件
- CPU
- 内存
- 网络IO
- 硬盘IO
如果硬件到了瓶颈,那就该考虑,是不是该升级配置了?是不是该做CDN加速了?是不是该做负载均衡了?
如果排除前面提到的一些不可控和被攻击的问题,而硬件负载都很低,那基本问题就出现在服务和业务相关问题上了。
2.高级服务-软件服务
- web服务 (Nginx/Apache/IIS等)
- 数据库 (MySQL/Oracle/MSSQL/redis等)
- 业务依赖的其它服务
服务的配置是否针对当前服务器的配置进行过针对性的优化?是否能发挥了当前硬件的潜能?
3.逻辑问题-业务问题
- 代码效率问题 (比方算法,有些查询语句)
- 业务逻辑问题 ( 比如优化资源访问方式,比如说分拆业务合并业务,减少请求数 )
- 资源没有复用 ( 比方一些静态资源不缓存,一些连接没有复用,动态常用使用的资源不缓存 )
简而言之,哪个拖后腿整哪个。剩下的就是定位问题和解决问题,这也是最重要的部分。
先挖坑,以后再填。