网站性能问题排查思路
网站运行中经常会遇到性能问题,有些是网站程序本身问题,有些是服务器配置跟不上时代,有些是其他程序影响,具体我们应该如何判断?下面我们就来讲一些平常工作中最简单实用的检查方法。
1、CPU占用过高:CPU是服务器的心脏,如果有客户反馈网站非常慢,我们远程进入客户服务器,首先是观察CPU使用率;
2、内存占用过高:内存在程序运行时有着至关重要的作用,也是在资源管理器中观察使用情况;
3、硬盘占用过高:众所周知硬盘的性能已经严重影响IT业的发展,也是我们服务器的主要性能瓶颈,这个可以通过网站访问量和数据库大小和读取速度来观察是否读写硬盘很多同时硬盘又是性能很差的就可以进行初步的判断,如果是win2008以上版本可以通过任务管理器来查看硬盘使用情况,如果是win2003的话可以使用硬盘使用量检测工具监控来辅助判断。
4、网络占用过高:这个可以通过任务管理器中的网络使用量来检测。
下面我们就以上问题做一下排查处理:
1、CPU过载,如果通过任务管理中的进程CPU使用率监测到是iis或者sql占用的,那么很大程度上可以确定网站存在问题,如果是杀毒软件等其他因素造成就另作他论,我们只关注IIS和SQL的使用率,IIS占用cpu可以通过下面方法来确定是iis中哪个站占用的:
<1>查iis应用程序池在任务管理器中的pid
<2>打开命令提示符cmd
<3>对于IIS6可以在cmd运行 "iisapp -a"来显示应用程序池的性能列表。(iisapp.vbs它是一个脚本程序,在安装2003时需要SP1才有 )
<4>对于IIS7可以直接用它的外壳命令【C:"Windows"System32"inetsrv>appcmd.exe list wp】来显示
<5>有时候因为服务器安全问题不能直接运行,我们可以通过下面的方法解决下:
1:在system32文件夹中有appcmd.exe工具,%windir%system32inetsrvappcmd.exe
2:打开doc命令窗口,定位到该文件夹
3:输入查看命令:appcmd list wp,即可看到所有w3wp进程的情况了
输入命令之后,在cmd可以看到正在运行的工作进程列表,也就是网站的关联的应用程序池名,而6476表示就是我们上面在任务管理器上看到PID,如下图:
如此一来,我们就确定占用CPU高的是哪个网站。
网站运行时多是读写sql时和iis请求处理、页面生成会占用cpu,如果很诡异的占用100%之类就肯定是程序有问题,也许是页面中有无限循环之类的bug。我们可以通过Log Paser Studio日志分析,快速定位到异常页。下面简单介绍下操作流程:
<1>安装Log Parser Studio
a) 需要先安装Log Parser,下载地址:
b) 安装Log Parser Studio,下载地址:,下载之后解压即可。
<2>运行Log Parser Studio
在之前解压的LPSV2.D1文件夹中运行LPS.exe。
<3>指定IIS日志文件路径
<4>创建查询
a) 点击“Create a new queyr”按钮
b) 在查询窗口输入查询语句(SQL语法),比如:
SELECT TOP 10
[LogRow],[date],[time],[c-ip],[cs-method],[time-taken],[cs-uri-stem],[cs-uri-query],[sc-status],[sc-win32-status]
FROM '[LOGFILEPATH]'
order by time-taken desc
设置Log Type,分析IIS日志选择IISW3CLOG
<5>点击“Execute active query”按钮,执行查询,这样我们就能快速分析出哪些页面有异常情况。
另一个就是SQL占用CPU很高,这个占用其实和web占用原理是差不多的,由于网站中有循环等问题导致不停的读写数据库,以至于占用较大,这里就可以使用专业的工具“活动和监视器”,这个工具和性能优化的具体文章可参考:
2、内存过载:内存过载和上面cpu过载我们要关注的点差不多,就是IIS进程和sql进程占用的内存情况,根据这两个进程的占用情况来决定排查方向和方法:
IIS占用内存过多,这种情况经常是服务器上网站较多或者访问量较大。
SQL占用内存过大,这种情况很多,也可以借鉴前面的文章http://tech.powereasy.net/Item/3160.aspx
3、硬盘过载:服务器标配的硬盘应该是1万或1万5千转的,如果是7600转的硬盘,一般情况先访问量大一些就会导致硬盘过载。如果是程序问题可以通过硬盘监控软件来找到进程。
4、网络过载:将iis关掉看网络使用率是否会恢复正常,然后使用排除法来检查具体是什么进程占了网络。