网站响应慢了,用户开始埋怨,老大安排你去优化,可是优化如何开始呢。
优化开始前一定要理清思路,问自己,网站的瓶颈在哪里。
系统的瓶颈在何方呢?如果你的系统有完善的监控分析系统的话,可以从统计数据和图形上
看到大致的系统瓶颈所在,但是如果你的系统没有这些数据,你又如何来确定系统的瓶颈呢。
按照一般的思路,我们对系统进行逻辑功能的划分,如静态服务器,动态服务器,
数据库服务器,业务逻辑服务器。分别针对对这些服务器的带宽、内存使用、cpu使用率、磁盘使用情况进行
分析,如对于动态服务器而言,其cpu的使用率一般情况下是其瓶颈;而对于静态文件服务器,
由于其逻辑简单,但需要传输大量的文件,其出口的带宽很有可能是其瓶颈;对于数据库服务器,
cpu和磁盘都有可能是瓶颈。
我们可以通过如下几个方面来进行查找和排除:
1 网络带宽
带宽可能是最直接的一个瓶颈,可以很容易的估计到。
假如运营商给你提供了10M的带宽,注意带宽的单位是bit,
如果你的一个页面的大小是10K字节,那么一秒钟的最多的并发量这样计算:
10*1024/8/10=128
如果每秒并发超过这个数字,你的带宽就无法接受了。
或者通过netstat命令来观察一下你的网络收发包的情况,使用netstat -s来观察一些统计
的数据,如果发现等待包队列里总是有大量的包待处理,一方面说明可能你的程序有问题,
另一方面说明可能你的并发量太大,系统已经处理不过来了,可能已经开始丢包了。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)按照这个两个思路去检查吧。
2 CPU
如果带宽不是问题,又有这么大的并发量,下一个很容易是问题的就是你的cpu了。
如果你的网站有大量的动态请求,如php操作数据库后再返回,
cgi代码逻辑里有大量的排序等耗费cpu的操作,或者是你的cgi程序
写的不好,会死循环,这时你的cpu就将成为瓶颈。
在linux上试试top命令,看看你的机子的负载,通过最右上角的1分钟、5、15分钟采样的平均负载可以
看到你的机子在一段时间内的一个负载情况,如果过去15分钟你的机子的负载大于你的cpu的数目*5,
说明你的机子很繁忙了,很多进程都需要等待处理了。
或者vmstat -n 1命令,看看你的cpu idle的时间有多少,等待处理的进程数量有多少,磁盘块的读写有多少。
如果cpu idle的时间很少,或者等待处理的进程数量很多,说明你的系统比较繁忙。
3 磁盘操作
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)如果你的带宽很大,cpu比较的空闲,接下来的瓶颈很可能是磁盘的io操作了。
从内存读取数据是相当快的,但是从硬盘读取数据是内存读取数据的50到100倍的时间,
使用iostat -dx查看一下你的硬盘操作的情况,如果有大量的block阻塞着等待写入到硬盘,
你需要检查一下你的代码,看看是否有大量的日志操作,或者写文件的操作阻塞住了。
4 业务逻辑服务器响应慢
如果上述都ok,而且你的cgi又连接到其它的业务逻辑服务器请求数据的情况,你需要检查
你与业务逻辑服务器之间的连接是否正常,带宽是否够用,你的业务逻辑服务器的性能如何。
5 内存不够用
对于一些大容量缓存的业务服务器,如果缓存过多的内容,淘汰策略不好的话,会导致使用掉过多的内存,
从而引起操作系统进行大量的swap交换,进而影响到系统的性能,成为瓶颈。
通过ipcs -a观看系统的使用的共享内存的情况,如果共享内存使用太多的话,考虑较少一点共享内存的大小。
使用free来来观察系统的内存使用情况,如果发现空闲的内存空间少,使用top命令,然后ctl+M看看
那些进程占用了大量的内存,适当关掉一些进程,部署在其它的服务器上。