51、网络与IIS故障诊断工具全解析

网络与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 错误记录和通知 长期保存错误历史,及时通知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值