网络与IIS故障诊断工具全解析
在网络和服务器管理中,故障诊断是一项至关重要的任务。本文将介绍一系列实用的工具,帮助你更高效地进行网络连接测试和IIS故障排查。
1. Telnet工具
Telnet是一个强大的工具,可用于测试特定端口的连接性,并确认是否能通过防火墙访问。就像Ping用于检查网络连接一样,Telnet可用于检查端口的可用性。
在Windows Server 2008中,Telnet客户端默认未安装。首次启用它,可按以下步骤操作:
1. 打开控制面板。
2. 选择“程序”。
3. 点击“打开或关闭Windows功能”。
4. 在“功能摘要”部分,点击“添加功能”。
5. 选择“Telnet客户端”,然后完成向导。
需要注意的是,“Telnet服务器”是一个单独的工具。
要测试特定端口,可在命令行中输入以下命令:
Telnet {ServerName} {PortNumber}
例如:
Telnet Microsoft.com 80
这将测试你是否能够访问名为Microsoft.com的域名的80端口。你也可以使用IP地址进行测试。在这种情况下,结果将是一个空白的Telnet屏幕,这是正常现象。如果你熟悉HTTP协议,此时可以与Microsoft.com的Web服务器进行交互。例如,输入以下命令:
GET http://www.microsoft.com/en/us/default.aspx
请确保“GET”全部为大写字母,这样可以获取默认主页。
不同的应用程序可能会给出不同的信息。有些应用程序开始时会显示空白屏幕,而有些则会立即显示一些信息。关键是不要出现超时错误。为了对比端口测试失败的情况,可输入以下命令:
Telnet Microsoft.com 81
它会显示“Connecting To microsoft.com…”一段时间,最终会超时。
以下是Telnet工具使用的流程图:
graph TD;
A[开始] --> B[检查Telnet客户端是否安装];
B -- 未安装 --> C[打开控制面板,添加Telnet客户端];
B -- 已安装 --> D[在命令行输入Telnet命令];
D --> E[测试端口连接];
E -- 成功 --> F[获取响应信息];
E -- 失败 --> G[显示超时或错误信息];
F --> H[结束];
G --> H[结束];
2. 可安装工具
除了Windows Server 2008中内置的工具外,还有一些其他的Microsoft和第三方可安装工具,这些工具对于IIS 7.0的故障排查非常有用。
2.1 IIS 6.0资源工具包
虽然微软可能会在未来发布IIS 7.0资源工具包,但在Windows Server 2008发布时,还没有更新的计划。不过,IIS 6.0资源工具包中的许多工具仍然可以在IIS 7.0中使用,对故障排查和诊断很有价值。
IIS 6资源工具包中的工具包括:Apache to IIS 6.0 Migration Tool、CustomAuth、IISCertDeploy.vbs、IIS Host Helper Service、IISState、Log Parser、Metabase Explorer、Permissions Verifier、RemapUrl、SelfSSL、TinyGet、Web Capacity Analysis Tool和WFetch。以下将介绍一些在IIS 7.0中工作良好且与故障排查和诊断相关的工具。
| 工具名称 | 功能简介 |
|---|---|
| IISState | 用于进行相关进程信息的内存转储,辅助调试IIS问题 |
| WFetch | 监听所有Web流量,查看IIS与Web客户端之间的通信细节 |
| Web Capacity Analysis Tool (WCAT) | 对网站进行压力测试,模拟大量访问者 |
| Log Parser | 强大的日志分析工具,可处理多种数据源 |
| DelegConfig | 帮助排查服务器上的身份验证问题 |
| Process Explorer | 实时查看进程和线程信息,辅助定位高CPU问题 |
| IIS Diagnostics Toolkit | 包含多个工具,可深入诊断认证、SMTP等问题 |
| SSLDiag | 用于排查SSL和证书相关问题 |
| DebugDiag | 用于排查挂起、性能缓慢、内存泄漏和崩溃问题 |
| TraceDiag | 使跟踪功能更易于使用,获取丰富信息 |
| ELMAH | 记录所有错误到磁盘或发送电子邮件,方便事后排查 |
2.2 IISState
IISState是专门为IIS开发的调试工具,可进行相关进程信息的内存转储。该工具可从命令行运行,获取转储文件相对简单,但首次阅读转储文件可能会有一定难度。
IISState 3.0版本可从IIS资源工具包中获取,最新版本可在 www.iisfaq.com/default.aspx?view=P197 下载。安装IISState有两种方式:
- 运行iisstate.msi文件 :这种方式不会向服务器添加任何注册表项或DLL,在生产服务器上安装较为安全。安装时,需指定安装文件夹,输出文件夹将位于IISState安装文件夹下。
- 手动安装 :需要从Microsoft添加调试器包,该调试器包因操作系统版本而异。可从 www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx 获取Windows调试器包。
IISState的命令行选项如下:
IISState –p <PID> [-d] [-hc] [-sc]
-
<PID>:进程标识符,可在任务管理器中找到。运行iisstate –p <PID>将对该进程进行内存转储,并保存到<install dir>\output文件夹中。 -
-d:执行完整转储。请注意,不要公开发布此信息,因为它可能包含敏感信息,例如在内存转储时正在处理的信用卡信息。 -
-hc:告诉IISState等待发生硬崩溃(Dr. Watson)后再执行内存转储。 -
-sc:告诉IISState等待发生软崩溃(通常是ASP0115类型的故障)。由于IIS在软崩溃后仍会继续运行,你可以通过按Ctrl+C停止IISState。
内存转储时,进程会暂停,完成后将继续运行,不会终止进程。只有与IIS相关的进程(如InetInfo.exe、dllhost.exe或w3wp.exe)可以使用该工具。
完成内存转储后,输出结果将保存在文本文件或转储文件中(如果使用了 -d 命令)。文本文件可以用记事本或其他文本编辑器打开,转储文件可以用WinDbg等调试器读取。详细的配置说明可在 www.adopenstatic.com/faq/IISConfigureIISState.aspx 找到。
虽然微软没有正式支持IISState,但会在IIS新闻组(microsoft.public.inetserver.iis)提供帮助。在向新闻组发送日志文件之前,建议先自行查看文件,尝试从中获取有用信息。每个线程的信息都会保存到日志文件中,IISState会尝试填充关键信息,例如是否存在Jet(Microsoft Access)故障,或者是否知道线程正在运行的文件路径。
以下是日志文件中一个线程的示例:
Thread ID: 19
System Thread ID: 23ac
Kernel Time: 0:0:0.0
User Time: 0:0:0.0
Thread Status: Thread is in a WAIT state.
Other information: Thread is waiting for a lock to be released. Looking for lock
owner.
Owning thread System ID: 208c
Thread Type: ASP
Executing Page: Unable to locate ASP page
# ChildEBP RetAddr
00 02f5faf0 7c822124 ntdll!KiFastSystemCallRet
01 02f5faf4 7c83970f ntdll!NtWaitForSingleObject+0xc
02 02f5fb30 7c839620 ntdll!RtlpWaitOnCriticalSection+0x19c
03 02f5fb50 709ec965 ntdll!RtlEnterCriticalSection+0xa8
04 02f5fb98 709e271a asp!CHitObj::ViperAsyncCallback+0x101
05 02f5fbb4 75bd72a5 asp!CViperAsyncRequest::OnCall+0x92
06 02f5fbd0 7770f0eb comsvcs!CSTAActivityWork::STAActivityWorkHelper+0x32
07 02f5fc1c 7770fb38 ole32!EnterForCallback+0xc4
08 02f5fd7c 77710042 ole32!SwitchForCallback+0x1a3
09 02f5fda8 77694098 ole32!PerformCallback+0x54
0a 02f5fe40 777127fd ole32!CObjectContext::InternalContextCallback+0x159
0b 02f5fe60 75bd7649 ole32!CObjectContext::DoCallback+0x1c
0c 02f5fecc 75bd79a5 comsvcs!CSTAActivityWork::DoWork+0x12d
0d 02f5fee4 75bd833e comsvcs!CSTAThread::DoWork+0x18
0e 02f5ff04 75bd878a comsvcs!CSTAThread::ProcessQueueWork+0x37
0f 02f5ff84 77bcb530 comsvcs!CSTAThread::WorkerLoop+0x17c
10 02f5ffb8 77e66063 msvcrt!_endthreadex+0xa3
11 02f5ffec 00000000 kernel32!BaseThreadStart+0x34
乍一看,这些信息可能有些晦涩难懂,但可以从中获取一些有用的信息。例如,内核时间和用户时间非常低(在这个例子中为零),这意味着该线程没有导致高CPU使用率。在其他情况下,这两个数值可以帮助你找出占用CPU资源的线程。不过,由于内核时间和用户时间是从进程启动时开始计算的,即使某个线程当前未被使用,这两个数值也可能很高。因此,最好连续获取两个转储文件并进行比较,这样能得到更准确的信息。
在这个例子中,该线程正在等待另一个线程(线程ID为208c)释放锁。让我们在同一个日志文件中查找线程208c的信息:
Thread ID: 18
System Thread ID: 208c
Kernel Time: 0:0:0.46
User Time: 0:0:1.312
*** WARNING: Unable to verify checksum for D:\com\ASPPop3\pop3svg.dll
*** ERROR: Symbol file could not be found. Defaulted to export symbols for
D:\com\ASPPop3\pop3svg.dll -
Thread Type: ASP
Executing Page: ?
# ChildEBP RetAddr
00 02f1f0dc 7c821364 ntdll!KiFastSystemCallRet
01 02f1f0e0 77e42439 ntdll!NtDelayExecution+0xc
02 02f1f148 77e424b7 kernel32!SleepEx+0x68
03 02f1f158 0331aa5a kernel32!Sleep+0xf
从这些信息中可以看出,该线程正在使用pop3svg.dll,并且最后一行显示它正在休眠,等待其他操作。我们可以合理推测,代码正在使用ASPPOP3(一个可以检查POP3账户的COM+组件)。可能是邮件服务器出现故障,或者该服务器与邮件服务器之间存在网络连接问题。
虽然并非所有的内存转储文件都能提供如此明显的信息,有些甚至可能没有任何线索,但IISState在许多情况下仍然是一个非常有用的工具,因为它能提供详细的信息。
Process Explorer也可以实时提供这些信息,包括线程的CPU使用率。如果你需要快速获取内存转储文件以便后续研究,或者需要他人帮助解读内存信息,IISState会很有用。而Process Explorer的优势在于,它可以让你在问题发生时实时深入研究,并且提供比IISState更多的信息。
网络与IIS故障诊断工具全解析
2.3 WFetch
WFetch是一个简单而强大的工具,它能够监听所有Web流量,让你查看IIS与Web客户端之间通信的所有细节,包括请求、响应、头部信息、主体内容、内容长度、状态码等等。对于排查Web浏览器和IIS服务器之间的实际Web流量问题,WFetch非常有用,因为它能让你看到双方之间的完整对话。
2.4 Web Capacity Analysis Tool (WCAT)
WCAT是一个命令行工具,既可以使用配置文件进行控制,也可以直接从命令行操作。其输出结果可以保存为.log文件或.xml文件,具有很强的灵活性,可以创建几乎任何类型的测试。该工具可以对网站进行压力测试,通过模拟大量访问者,了解网站在负载情况下的性能表现。
多个WCAT客户端服务器可以同时运行,以产生更大的负载。结合本章提到的其他工具使用,能大大提升WCAT的价值。例如,使用性能监视器可以观察Web服务器在模拟流量期间的性能。不过,在生产服务器上运行WCAT,或者在带宽成本较高的网络中运行时要格外小心,因为它可能会让网站看起来像是遭受了黑客攻击,甚至导致生产网站崩溃。
以下是WCAT使用的简单步骤:
1. 准备配置文件或确定命令行参数。
2. 启动WCAT客户端服务器(可多个同时运行)。
3. 运行测试并将结果保存到指定文件。
graph TD;
A[开始] --> B[准备配置或参数];
B --> C[启动WCAT客户端];
C --> D[运行测试];
D --> E[保存结果到文件];
E --> F[结束];
2.5 Log Parser
Log Parser是一款强大的工具,对于想要深入挖掘IIS日志、事件查看器、注册表、系统日志、XML数据等的用户来说,它就像梦想成真。通常,它作为命令行工具使用,但也包含COM API。许多第三方工具为其添加了图形用户界面(GUI)包装器,使其不仅功能强大,而且易于使用。虽然由于其使用类似SQL的语法,对于初学者来说可能有一定难度,但花些时间学习后,就能轻松上手,并且投入的时间会带来巨大的回报。
Log Parser 2.2是最新版本,可在 www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07 下载。运行Log Parser时,只需将下载的压缩文件解压到任何计算机上,然后可以跨网络运行,或者将logparser.exe复制到要使用的计算机上,无需安装。它适用于生产服务器,非常稳定且速度极快。
以下是几个Log Parser的使用示例:
- 示例1:在事件查看器的系统日志中搜索所有错误条目
LogParser.exe “SELECT * FROM System WHERE EventType = 1 ORDER BY TimeWritten DESC”
EventType值为1表示错误。可以指定输入格式和输出格式,但如果不指定,Log Parser会自动进行合理猜测。在这个例子中,它会正确猜测输入格式为 –i:EVT (事件查看器),输出格式为 –o:NAT (原生格式)。该查询选择事件查看器系统日志中EventType为1(错误)的所有字段,并按事件条目的时间戳(TimeWritten)降序排序。“System”关键字是保留字,告诉Log Parser查询事件查看器的系统日志。
- 示例2:获取HKEY Local Machine和HKEY Current User的运行键的注册表值
LogParser.exe “SELECT ValueName, Value FROM \HKLM\Software\Microsoft\Windows\CurrentVersion\Run, \HKCU\Software\Microsoft\Windows\CurrentVersion\Run” -i:REG
这里有两个运行键,用逗号分隔,可以根据需要添加更多注册表键。 –i:REG 表示输入来自Windows注册表,虽然Log Parser可以根据其他信息自动判断,但为了示例清晰,明确指定了输入类型。
- 示例3:在IIS的“默认网站”中搜索,并统计每个网页扩展名的访问次数
LogParser.exe “SELECT TOP 20 EXTRACT_EXTENSION(cs-uri-stem), COUNT(*) AS Hits FROM <Default Web Site> GROUP BY EXTRACT_EXTENSION(cs-uri-stem) ORDER BY Hits DESC”
extract_extension 会从网页文件名中提取扩展名(如aspx、gif、html),按扩展名分组,并统计前20个访问次数最多的扩展名的访问次数。 <Default Web Site> 会让Log Parser自动查询该网站的所有日志文件,只需引用网站名称即可。在这个查询示例中,没有设置输入类型,因为Log Parser能够自动判断。
需要注意的是,Log Parser在读取非常大的数据存储时可能会占用大量系统资源,但除此之外,在生产服务器上运行是安全的。
2.6 DelegConfig
DelegConfig是一个Web应用程序,用于帮助排查服务器上的身份验证问题。它可以显示Kerberos和委托凭据,包括服务主体名称(SPNs)、委托设置以及正在使用的身份验证方法。在本地域环境中,对于Kerberos身份验证问题的排查特别有用,因为Kerberos通常不在互联网上使用。
安装DelegConfig的步骤如下:
1. 从 www.iis.net 网站下载DelegConfig。
2. 解压文件,并将其复制到网站的子文件夹中。
3. 将Kerberos文件夹标记为应用程序。
如果在IIS 7中以集成模式运行,需要编辑web.config文件,将 Impersonate=”true” 改为 impersonate=”false” ,或者完全删除该行,以便DelegConfig正常工作。
运行DelegConfig时,只需在浏览器中访问网站上的Kerberos文件夹。该页面会有详细的说明,并在每个部分旁边显示状态,根据测试结果显示不同的图标。
2.7 Process Explorer
Process Explorer就像是增强版的任务管理器。当任务管理器的功能不够用时,Process Explorer能够出色地接管。它允许你实时深入查看所有正在运行的进程,甚至可以查看进程中的线程。你可以查看每个线程的内存信息、找出锁定文件的进程、了解每个进程或线程的CPU使用率,还能查看DLL依赖关系。
Process Explorer由Mark Russinovich编写,可在 www.sysinternals.com 下载。2006年7月,微软收购了Sysinternals,所以现在它是微软的工具,但该网站仍然可用。
对于IIS管理员来说,Process Explorer在隔离w3wp.exe工作进程中的高CPU问题时非常有用。它能让你了解每个线程的CPU使用率,查看线程的具体内容,还能让系统管理员找出锁定文件的进程,并在必要时释放锁定。
使用Process Explorer非常简单,无需安装,不会对服务器的运行产生任何影响。只需从网站下载到任何计算机,然后将procexp.exe复制到服务器上,双击该文件即可启动。
不过,使用Process Explorer时要格外小心,因为它功能强大,可能会误杀关键系统进程,导致操作系统崩溃。所以,使用时一定要谨慎。
2.8 IIS Diagnostics Toolkit
IIS诊断工具包包含多个有价值的工具,你可以单独安装,也可以全部安装。这些工具可以让你深入诊断认证、SMTP、Web流量、日志文件报告等方面的问题。由于其中一些工具在工具包发布后进行了更新,建议单独搜索以确保使用的是最新版本。该工具包可从 www.iis.net 下载。
在撰写本文时,该工具包尚未针对IIS 7.0和Windows Server 2008进行更新,虽然不确定近期是否有更新计划,但大多数工具在Windows Server 2008上仍然可以正常使用。
2.9 SSLDiag
SSL诊断工具用于排查安全套接层(SSL)和证书相关问题。处理证书时,如果一切正常,操作相对简单,但一旦出现问题,很难找出原因。SSLDiag可以实时洞察IIS和SSL证书的内部工作情况。
SSLDiag既可以从命令行运行,也可以使用图形界面。它可以设置为监听所有流量,也可以缩小范围,只关注特定的网站。在繁忙的服务器上,将范围缩小到包含问题的最小区域通常很有用。
实时运行SSLDiag需要重启IIS,因此请确保在维护窗口期间或能够接受网站中断的时间实施。在撰写本文时,SSL诊断工具v1.1在IIS 7.0中不能完全正常工作,后续版本可能会提供完整功能,请持续关注。
2.10 DebugDiag
调试诊断工具(DebugDiag)的大部分功能现在已包含在IIS 7.0中,本章前面已进行了介绍。不过,由于它在Windows Server 2008和IIS 7.0上仍然受支持,值得再次关注。
DebugDiag用于排查挂起、性能缓慢、内存泄漏和崩溃等问题,不仅适用于与IIS相关的进程,还有专门针对IIS和COM+调试的额外调试脚本。
DebugDiag最初作为IIS诊断工具包的1.0版本发布,更新版本可直接从 www.microsoft.com 下载。
它以图形界面工具的形式运行,允许管理员监听特定URL,监视崩溃、IIS挂起、内存和句柄泄漏等情况。当这些情况发生时,会生成内存转储文件,然后可以使用调试诊断工具生成转储信息报告。这些信息对于了解IIS和IIS工作进程内部的情况非常有价值,会详细报告进程、线程和内存的信息。
2.11 TraceDiag
Windows 2003 SP1发布了一些强大的跟踪功能。TraceDiag是一个工具包,旨在让跟踪功能更易于使用,并提供丰富的信息。由于IIS 7.0中的RSCA、FREB和其他工具,TraceDiag的使用频率可能会降低,因为IIS 7.0的新工具更加用户友好。但TraceDiag仍然有其用途,了解它的存在是有好处的。
TraceDiag需要单独下载,可以在微软的网站上找到。安装后,它会出现在开始菜单中,可以从命令行运行。
2.12 ELMAH
在前面的内容中,我们提到了跟踪功能,可以在页面上输出关键信息或在ASP.NET跟踪查看器中查看。Atif Aziz编写了一个HTTP模块ELMAH(Error Logging Modules and Handlers),可以快速添加到bin文件夹中,并在web.config文件中引用。它可以将所有错误记录到磁盘,或者在错误发生时发送电子邮件。这样可以长期保存错误历史记录,方便事后排查故障,也可以在错误发生时及时通知你。
虽然ELMAH不是微软的工具,但许多微软员工都在使用,并且有几篇MSDN文章介绍了它。可以从Scott Mitchell和Atif Aziz撰写的 MSDN文章 开始了解。
配置ELMAH很简单,设置一两个之后,几分钟内就能完成实施。该模块可以保存到全局程序集缓存(GAC)或/bin文件夹中,然后在web.config文件中添加一些引用。如果想在线查看数据,需要引用HTTP模块和HTTP处理程序。可以配置日志数据库或电子邮件地址等设置。从概念上讲,它的工作方式与跟踪功能类似,但增加了前面描述的功能。通过访问web.config中HTTP处理程序设置的路径,可以查看错误日志,默认路径是elmah/default.aspx。
综上所述,这些工具在网络连接测试和IIS故障排查中都有各自的优势和适用场景。合理选择和使用这些工具,能够帮助你更高效地解决问题,确保网络和服务器的稳定运行。
| 工具名称 | 适用场景 | 优势 |
|---|---|---|
| Telnet | 测试特定端口连接性 | 操作简单,可快速验证端口可用性 |
| IISState | IIS进程内存转储 | 提供详细进程信息,辅助深入排查 |
| WFetch | 查看Web流量细节 | 全面呈现通信内容,便于定位问题 |
| WCAT | 网站压力测试 | 灵活创建测试,评估网站负载性能 |
| Log Parser | 日志及多数据源分析 | 强大的查询功能,类似SQL语法 |
| DelegConfig | 排查身份验证问题 | 清晰显示认证相关凭据和设置 |
| Process Explorer | 实时进程和线程监控 | 实时获取信息,定位高CPU问题 |
| IIS Diagnostics Toolkit | 多方面IIS诊断 | 包含多个工具,功能全面 |
| SSLDiag | SSL和证书问题排查 | 实时洞察内部工作情况 |
| DebugDiag | 排查性能和崩溃问题 | 生成详细内存转储报告 |
| TraceDiag | 跟踪功能辅助 | 让跟踪更易用,获取丰富信息 |
| ELMAH | 错误记录和通知 | 长期保存错误历史,及时通知 |
超级会员免费看
356

被折叠的 条评论
为什么被折叠?



