一.某个用户向你反映说你开发的网站访问速度很慢,可是该用户访问其余问题很正常,分析下缘由、有哪些工具分析缘由、怎么解决问题?前端
(1)可能的缘由一:服务器出口带宽不够用。这是一个很常见的瓶颈。一方面,多是自己购买的服务器出口带宽就很小(企业购买带宽至关昂贵),一旦用户访问量上来了,并发量大了,天然均分给用户的出口带宽就更小了,因此某些用户的访问速度就会降低了不少。另外一个,就是跨运营商网络致使带宽缩减,例如不少公司的网站(服务器)是放在电信的网络上的,而若是用户这边对接的是长城或者说联通的宽带,运营商之间网络传输在对接时是会有限制的,这就可能致使带宽的缩减。mysql
(2)可能缘由二:服务器负载过大忙不过来,好比说CPU和内存消耗完了,这个容易理解,不展开。web
(3)可能缘由三:网站的开发代码没写好,例如mysql语句没有进行优化,致使数据库的读写至关耗费时间。sql
(4)可能缘由四:数据库的瓶颈,也是很常见的一个瓶颈,这点跟上面第三个缘由能够一块儿来讲。当咱们的数据库变得愈发庞大,好比好多G好多T这么大,那对于数据库的读写就会变得至关缓慢了,索引优化当然能提高一些效率,但数据库已经如此庞大的话,若是每次查询都对这么大的数据库进行全局查询,天然会很慢。这个学过数据库的话也是挺容易理解的。数据库
2、针对上面可能的缘由,有哪些方法和工具去检测呢:
(1)某个用户反馈网站访问变慢,怎么去定位问题。首先你本身也打开下网站,看是否会出现用户反映的问题,若是你这边访问没问题,那就多是用户那边的问题了,这块就是要先肯定是用户那一方的问题仍是自身好比说服务器或者网站的问题。浏览器
(2)发现确实是本身服务器或者网站的问题,那么能够利用浏览器的调试功能(通常浏览器都会有),调试网络看看各类数据加载的速度,哪一项消耗了多少时间均可以看到,是哪块数据耗时过多,是图片加载太慢,仍是某些数据加载老半天都查不出来。缓存
(3)而后针对服务器的负载状况,能够去查看下服务器硬件(网络带宽、CPU、内存)的消耗情况。带宽方面查看流量监控看是否是已经到了峰值,带宽不够用了,若是是公司本身买服务器搭的网站服务器的话,须要本身搭建监控环境;若是用的是阿里云腾讯云这些的,那这些平台那边会提供各方面的监控好比CPU、带宽等等,在后台就能够看到了。服务器
(4)若是发现硬件资源消耗都不高,都比较充裕,那要去看看是否是程序的问题了。这个能够经过查日志来找,好比PHP日志、Apache日志、mysql日志等等的错误日志,特别如mysql有个慢查询的日志功能,能够看到是否是某条mysql语句特别慢,若是某条语句花的时间太长,那这条语句颇有可能有问题。网络
(5)至于说到的数据库太庞大,这个直接看就看获得了,好比一个表的文件大小变得特别大了。架构
针对上面的这些问题,有哪些解决和优化的办法呢:
(1)出口带宽的问题,这个很简单,加带宽,有钱就多买带宽,很简单。
(2)mysql语句优化。
(3)数据库太庞大,为了读写速度,进行“拆表”、“拆库”,就是把数据表或者数据库进行拆分。
(4)上面的拆库拆表都是针对数据库实在太庞大才会这样作,通常在此以前会有其余优化方法,好比mysql的主从复制,一台主服务器专门用于写,而后其余从服务器用来读,写完以后会同步更新到其余读的服务器中。例如阿里的双十一活动,都不知道用了多少万台服务器一块儿在扛着。
(6)还有这几年用得比较多的非关系型数据库,它使用了缓存机制,它把数据缓存到了内存,用户访问数据直接从内存读取,读取速度就比在磁盘中读取快了不少,还有它的一个key-value读取机制,这个听师兄说以后没听懂。
(7)CDN(content-delivery-network:内容分发网络),鸡蛋放在多个篮子里,把数据放在离用户更近的位置(例如网站的一些静态文件好比图片或者js脚本),用户访问时判断IP来源是广州,那就经过智能DNS解析到广州的服务器上,直接从广州的篮子里去获取数据,速度就快了。这里有个静态数据和动态数据的概念,例如图片和一些js文件通常是不变的,那就能够把它们的映像分布到全国各地,加快速度,而一些须要在网站后台动态产生的一些数据,则须要去到网站所在的服务器去产生并获得。这个涉及到两种数据的显示的问题,这就交由浏览器处理了。同时异步加载的技术例如前端的Ajax技术,异步请求数据,可使这些动态数据延迟加载,这块本身不怎么了解,可能表述很差。前端开发的人员应该更懂一些。
(8)上面都没有说到架构的优化,若是网站扛不住,是否是网站架构已经不能适应了,好比作个小博客把数据库服务器和web服务器都用同一台服务器,那全部负载都在同一台服务器上了。可是访问量上来扛不住了,就得加服务器了,就得在架构上优化了,好比在数据库上作集群,在web服务器上也作集群,好比web服务器集群,在服务器前面加一个负载均衡,负载均衡就是专门负责分发,把用户的请求均匀分布到各个服务器上。