第一次诊断
===============
通过比较和测试我们认为是下面的问题导致了IIS不能访问
1. IIS需要访问它的配置文件ApplicationHost.config。
但是这个文件经常会被其他进程占用导致IIS失败。
在事件日志中有IIS的WAS服务报错event ID 5172,错误代码0x80070003,代表The system cannot find the path specified.
同时在IIS管理器里面修改配置时,也常常会遇到报错说“ApplicationHost.config被占用”。
2. 我们用Process Monitor看到inetinfo.exe会频繁的写ApplicationHost.config
有时候每隔2,3秒钟就会写一次。这是文件被锁住的原因。
3. Inetinfo.exe本身并不会写ApplicationHost.config,而是其他的进程在通过IIS6 兼容API在调用inetinfo.exe中的IIS Admin Service在写。
我们停止了服务器上所有的IIS进程池,发现还是有写文件的动作发生,说明很可能是IIS之外的应用进程。
第二次诊断
=============
1. 有KB http://support.microsoft.com/kb/946517 提到类似的问题。
请检查一下下面文件的版本,如果低于表中列出的值,请安装KB中提到的补丁。
Windows Server 2008 and Windows Vista Service Pack 1 x86
Date | Time | Version | Size | File name |
19-Jun-2008 | 23:15 | 7.0.6001.22207 | 289,792 | Adsiis.dll |
19-Jun-2008 | 23:16 | 7.0.6001.22207 | 86,016 | Iisext.dll |
Windows Server 2008 and Windows Vista Service Pack 1 x64
Date | Time | Version | Size | File name |
19-Jun-2008 | 23:44 | 7.0.6001.22207 | 330,752 | Adsiis.dll |
19-Jun-2008 | 23:46 | 7.0.6001.22207 | 105,984 | Iisext.dll |
C:\Windows\System32\inetsrv\Adsiis.dll
C:\Windows\System32\inetsrv\Iisext.dll-------查看-》Details-》copyright -》Microsoft Corporation.All rights reserved.
2. 我们可以用下面的办法找到服务器上面,所以通过inetinfo.exe访问ApplicationHost.config的进程。
任何用到IIS 6 management compatibility的进程都会加载这两个DLL (system32下运行以下两个命令)
Tasklist /M adsiis.dll
Tasklist /M admwprox.dl
请一定用管理员权限运行CMD.exe(开始-》命令提示符 右击-》以管理员身份运行),否则可能会得不到需要的信息。
诊断结果
========
看到w3wp.exe和inetinfo.exe都是IIS的进程,而OWSTimer.exe是SharePoint的进程,故依然为sharepoint问题。
解决调试
=========
做下面的测试,以验证是哪一个进程在写ApplicationHost.config文件。
1. 请让服务器重新上线。
2. 运行Process Monitor,等待出现对ApplicationHost.config的write操作。
最好麻烦您能收集一个屏幕截图,这样我们可以帮您确认一下是否有写操作出现。
3. 运行Services.msc,找到Windows SharePoint Services Timer服务,停止该服务。
4. 观察Process Monitor是否还会收集到写文件的动作。
5. 如果还是有写操作,请运行inetmgr.exe
把所有的Application Pool都停止
6. 观察结果。
如果发现Windows SharePoint Services Timer服务一停,写操作就停止,请尝试清一下该服务的缓存,看看问题是不是可以得到解决。
结果与解决
========
最终确认为sharepoint的Timer job过大导致
解决:
http://support.microsoft.com/kb/939308