特征: 服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降。查看任务管理器,可以发现是IIS进程消耗了所有的CPU空闲时间,管理员在这种情况下,只好重新启动IIS服务,重新启动IIS服务后一切正常,但可能过了一段时间后,问题又再次出现了。
最有可能的直接原因: 此问题一般由网站程序设计不当引起死循环导致。如:有一个或多个ACCESS数据库在多次读写过程中损坏,微软的MDAC系统在写入这个损坏的ACCESS文件时,ASP线程处于BLOCK状态,结果其他线程只能等待,IIS被死锁了,全部的CPU时间都消耗在IIS进程中。
解决办法: 首先给每个站点都建一个应用程序池,这样便于找出问题出在哪一个站点上。(多个应用程序池会加重系统开销,建议把站点分批排查) 1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid。 2、在命令提示符下运行iisapp.vbs -a (此脚本文件在system32目录中,如果说找不到再加上路径运行一次)。这样就可以看到pid对应的应用程序池的名称了。 3、到iis中察看该应用程序池对应的网站,然后针对该站点排除错误。 (如果运行后出现 error - no no results 这样的提示,说明您的站点没有开启或还没有被访问过) 下面详细介绍一下 iisapp 的语法:
语法: iisapp [a/ AppPoolName | /p AppPoolID]
参数 /a AppPoolName
指定特定应用程序池的名称。(可选项)
/p AppPoolID
按 ID 号指定应用程序池。(可选项)
注释 • 如果未指定应用程序池名或 ID,则 iisapp 列出所有运行应用程序。 • 仅当使用 /s 时,才可使用 /u 和 /p 命令行选项。必须同时使用 /p 和 /u 才能提供用户密码。 • Iisext.vbs 执行 IIS 管理器中可用的相同操作。可使用任何一种工具管理 IIS 网站。 • 发出命令的计算机必须正在运行 Windows XP 或 Windows Server 2003 操作系统。用户必须是命令所影响的计算机上的 Administrators 组成员。 • 命令所影响的计算机必须是运行带有 Internet 信息服务 (IIS) 6.0 的 Windows Server 2003 的服务器。 (转自:蓝芒)
|