httperr日志大量503错误的一些解决思路

linker13年前 (2008-03-22)网站技术1222

还是昨天发现的那个问题,今天发现dz论坛又不能访问了,然后访问了一下其他应用程序池的站,访问正常,说明dz论坛所在的应用程序池,估计又死了。看来,昨天的解决方案,不妥。

登陆服务器,果然,该应用程序池,已经连着有三个了,前两个还没有正常关闭,第三个也已经二百多M了,吓人;马上结束掉这几个应用程序池,然后到iis管理里面,停止这个应用程序池,之后直接到httperr目录里面,查看iis错误日志,马上又发现了很多“虚拟股市”引起的日志错误,大篇的,很长;开启应用程序池,到后台关闭掉插件“虚拟股市”,然后观察了下应用程序池,发现比较平稳,论坛反应速度比较快,比较正常,cpu虽然还是有些高,但算正常。

一边观察服务器的状态,一边再次查看了下最近的错误日志,发现有很多503的错误,搜索一下网络吧;网上有人发贴说可能与应用程序池的进程回收设置有关,建议把应用程序池的回收属性页的所有回收选项都禁用,理由是如果没有发现内存泄漏,线程刮起等现象的话应该就不需要设置进程回收。

现在不确定503错误到底是不是和进程回收有关系,如果禁用进程回收设置会不会缓解这个问题,会不会引起更严重的错误。就是如果一个web应用程序用着用着就莫名其妙的出错了,而查不到原因,而重启IIS或者重启应用程序池就缓解了,这时候就设置一下达到一定条件进行进程回收,但只是暂时的解决方案,最终应该找到原因并修复应用程序。

IIS帮助里也明确说明了设置进程回收的场景,而且说重叠回收中不会断掉tcp链接,会自动把请求平滑过度到新进程中,也就是这个过程中不会引起服务不可用,也就是503错误。

所以我也比较倾向于关掉进程回收选项

为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程ID是,IIS6.0经常假死(里面的观点不要无理由地打开回收工作进程和使用工作进程池。一般理由通常是有不明原因的内存泄露、线程挂起等)
http://hi.baidu.com/nayinian/blog/item/468c900fce94dcecab6457f7.html

为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程ID是,IIS6.0经常假死,经常有这样的提示:

事件类型: 警告
事件来源: W3SVC
事件种类: 无
事件 ID: 1013
日期: 2004-7-26
事件: 16:01:51
用户: N/A
计算机: COM-NET
描述:
为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程 ID 是 '2552'。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

相信这是由于不正确地设置了回收进程导致,建议关闭下列进程回收设置:
回收工作进程(分钟):1200
回收工作进程(请求数目):10000
启用CPU监视,最大CPU使用率:90%

这三种情况,恰恰我都设置了。依次所说,干脆把这有关回收的项目,全部关闭了,由服务器自已管理应用程序池的内存应用状况。

由于设定了进程自动回收,而当每达到10000次点击,或CPU超过100%,就会强行回收application,导致客户端会出现Sevice Unavailable的错误。(实际上10000次点击,访问量一般的网站,几分钟就够了。) 建议启用计数器日志来监视CPU利用率和asp.net的指标,可以帮助你定位每5~10分钟出现一次是否是上述原因导致。

另外,不要无理由地打开回收工作进程和使用工作进程池。一般理由通常是有不明原因的内存泄露、线程挂起等

回收工作进程相关说明(win2003安装iis在ie里键入下面的地址,里面介绍了启用进程回收的时机及重叠回收的概念)
mk:@MSITStore:C:\WINDOWS\Help\iismmc.chm::/htm/ca_recycwrkrprocess.htm

错误定义:503:“服务不可用”错误是一个非自定义的错误,该错误表示服务器当前无法处理该请求

原因:

1、管理员可能关闭应用程序池以执行维护。
2、当请求到达时应用程序池队列已满。
3、应用程序池标识没有使用预定义账户:网络服务,而自己配置了标识,但是配置的这个用户不属于IIS_WPG组
4、应用程序池启用了CPU监视,并且设置了CPU利用率超过一定百分比关闭应用程序池,而开发人员写的服务端页面(.asp,.aspx)执行效率不高,会引起CPU的长时间占用,最终达到设置的百分比,从而引起应用程序池关闭
5、应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为1000,可修改成一个更大的值,比如说4500.
6、web.config的system.web/httpRuntime节点的appRequestQueueLimit属性设置的值太低。

排查思路:

1、先检查C:\WINDOWS\system32\LogFiles\HTTPERR\httperr1.log,看里面有没有503错误,503错误是不会记录到C:\WINDOWS\system32\LogFiles\W3SVC1下的,如果503那一行有AppShutdown字样,肯能是由于CPU占用率太高导致自动关闭应用程序池。如果是AppOffline可能是由于应用程序标识出错引起的,如果是Disabled可能是由于管理员手工关闭应用程序池引起的。根据这些信息然后再采取响应措施。
2、根据原因5和原因6来设置更大的请求队列数目。
3、禁用所有应用程序池回收选项。
4、添加ASP.NET\Requests Current,ASP.NET\Requests Queued两个计数器,查看IIS的请求数和队列数。

更多内容,可至此查询:

相关链接:

TechNet V播:HTTP503故障排除(里面提到的可能性不打)
http://www.microsoft.com/china/technet/vcast/live/episode.aspx?newsID=class01_022
\\CXZ.amigo.bjmcc.net\input\503.wmv
IIS 状态代码(里面提到iis状态码及可能原因,其中包括503)
http://support.microsoft.com/kb/318380
如果 AppPoolQueueLength 值是否太低 " HTTP 503 服务不可用 " 错误消息(如果网站访问量比较大也许是这个原因)
http://support.microsoft.com/kb/816995/zh-cn
http://support.microsoft.com/kb/816995/en
FIX: ASP.NET 队列请求太多(该问题是asp.net 1.0的bug,已经有hotfix修复)
http://support.microsoft.com/kb/822148/zh-cn
http://support.microsoft.com/kb/822148/en
<httpRuntime appRequestQueueLimit> 元素(文中提到如何通过配置文件来设置应用程序请求的最大数目)

http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpgenref/html/gngrfhttpruntimesection.asp

客户端请求收到“503:服务不可用”错误(阐述503定义、可能原因及问题排查)
http://technet2.microsoft.com/WindowsServer/zh-CHS/Library/
IIS 6.0入门及进阶webcast(有IIS排错系列)
https://www.microsoft.com/china/technet/webcasts/class/iis.mspx
大家是不是也常遇到服务器不可用啊?Service Unavailable(博客园的一群人讨论503的原因及应该采取的措施)
http://www.cnblogs.com/birdshome/archive/
为应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程ID是,IIS6.0经常假死(里面的观点不要无理由地打开回收工作进程和使用工作进程池。一般理由通常是有不明原因的内存泄露、线程挂起等)
http://hi.baidu.com/nayinian/blog/item/
回收工作进程相关说明(win2003安装iis在ie里键入下面的地址,里面介绍了启用进程回收的时机及重叠回收的概念)
mk:@MSITStore:C:\WINDOWS\Help\iismmc.chm::/htm/ca_recycwrkrprocess.htm

上述内容摘自:http://www.cnblogs.com/onlytiancai/archive/2007/06/03/769309.html

在IIS 6.0中,记录日志的功能已经改为由http.sys实现,http.sys在内核模式下运行。这一改进加快了日志写入速度,同时避免了多个工作进程争用同一日志文件。某些特殊的情况下,http.sys会遇到错误,这时它应该但却不能将日志信息写入Web网站的日志,例如,工作进程正在被回收,禁止http.sys处理用户请求,或者用户试图连接到服务器,但请求中只提供了IIS所需信息的一部分。如果出现这类情况,http.sys将把事件写入一个新的日志文件httperr.log。

  在排解故障、优化IIS 6.0的过程中,httperr.log日志文件是十分重要的。默认情况下,httperr.log文件保存在\system32\logfiles目录,但可以修改,修改方法是找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters注册子键,在它下面添加一个名为ErrorLoggingDir的字符串值,在ErrorLoggingDir中设置保存日志文件的完整路径。在httperr.log日志文件中可以找到的信息包括:所有的503(服务不可用)错误,空闲连接超时,解析URL时出现的各种错误,最后10个提交给失败的应用程序池的请求。

  IIS 6.0还拥有一种称为二进制日志的功能,启用这个功能后,IIS 6.0将把Web网站的所有日志信息写入一个二进制格式的日志文件,日志文件的扩展名是.ibl。要启用二进制日志功能,只要把配置文件的W3SVCC/CentralBinaryLoggingEnabled条目设置成ture(1)即可。对于ISP来说,这个功能应该非常有用。ISP的每台机器上可能有1000甚至更多的Web网站,如果每个Web网站每天生成一个日志文件,日志文件的总数很快会达到一个天文数字。微软最近发布的Log Parser 2.2工具能够读取二进制日志文件并生成报告,这个工具可以Log Parser 的最新版本(2.2 版)下载。Log Parser 2.2还能够读取前面介绍的httperr.log文件并生成报告。如果这个直接下载链接不行,就还是从上面这个链接开始下吧。http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=890cd06b-abf8-4c25-91b2-f8d975cf8c07&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2ff%2ff%2f1%2fff1819f9-f702-48a5-bbc7-c9656bc74de8%2fLogParser.msi

  从很久以前开始,IIS就允许指定本地服务器上保存日志文件的目录了。不过,虽然IIS 5.0和IIS 4.0的IIS管理器允许在指定日志文件路径的时候输入一个远程服务器的通用命名规范(UNC)的路径,但Web服务器实际上不会把日志保存到远程服务器。只有IIS 6.0才真正支持日志文件路径的UNC路径名。

Log Parser 确实是一种非常酷的小实用工具,它解决了一些非常棘手的脚本启动问题。我们仍然不知道分析 SQL Server 日志有什么用,但是我们知道 Log Parser 的最新版本(2.2 版)能做以下事情:

• 搜索事件日志,快速找到并报告所关注的事件。

• 搜索文件系统,快速找到并报告所关注的文件和文件夹。

• 搜索 Active Directory,快速找到并报告所关注的对象。

• 搜索各种各样的日志文件。例如,Log Parser 能够搜索使用 W3C 扩展日志文件格式的日志。使用此格式的日志包括:个人防火墙日志;Microsoft Internet Security and Acceleration (ISA) Server 日志;Windows Media Services 日志;Exchange 跟踪日志;简单邮件传输协议 (SMTP) 日志文件。

• 快速而轻松地搜索 Internet 信息服务 (IIS) 日志、Netmon 捕获文件、注册表等多种文件。

这些功能还占不到它的全部功能的一半呢。Log Parser 使用一种真正的 SQL 查询语言,这意味着您可以执行聚合查询。想知道您的事件日志中的各种事件 ID 类型的数量(三十七个事件 100、四十三个事件 101、十四个事件 102)吗?没问题,Log Parser 能够胜任这项工作。当然,它还可以胜任很多很多其他工作。您可以使用一个 SQL 命令(例如“ORDER BY”)来以您需要的任何方式对返回数据进行排序,也可以使用“TOP”来仅返回若干最“如何如何”的记录(例如,您的硬盘上的 10 个最大的文件)。您可以从命令提示符下运行 Log Parser 2.2,也可以将其作为一个可编写脚本的 COM 对象 (MSUtil.LogQuery) 进行调用。

更多详细的功能示例我就不多说了,我要去安装测试去了,有意的到这个阿sir这里慢慢欣赏吧:有了 Log(即 Log Parser)就万事大吉了http://hi.baidu.com/totaobao/blog/item/c922a3649e3750f1f636542c.html

log parser2.2的详细情况及如何动作等功能,也可关注微软专贴:http://www.microsoft.com/china/technet/community/columns/profwin/pw0505.mspx

相关文章

经典:用CSS的float和clear创建三栏液态布局

本人对代码能力浅薄,只是会按自己的意愿,小改一番,对于css的这个格式,早就垂涎已久,今日见到实例,并且如此易懂,爱不释手,接录于此,细细研究,以备以后用之。三栏布局是目前最常见的网页布局,主要页内容...

利用HTML优化加快网页速度

web开发人员是否必须掌握复杂的组件技术才能加快html页面的访问速度?答案是:不一定!实际上,有许多关于HTML与DHTML方面的技巧,它们原理简单而且上手容易。无论是技术高超的老手,还是初涉编程的...

IIS突然不解析asp文件的处理步骤

原文出处:http://www.iisfaq.com/Default.aspx?tabid=3094 整理翻译:ajou 1.如果WEB站点目录下有Global.asa文件,改此文件文件名为G...

五行代码实现ASP无组件上传

目前有很多无组件上传类,大多写的相当复杂,有的居然还只能传文本,最关键的是没有10行代码以下的。   其实无组件上传最核心的代码就是ADODB.Stream,实际只用五行代码就可以实现了无组件上...

升级zblog至1.8 Arwen Build 81206版本

zblog是最好的asp单用户中文博客程序,这个称谓应该没有错,并且相当合适,在经过这几年的亲密试用,功能确实很好,插件、主题的强大支持,虽然比不上wordpress的显赫优势,但对于广大的中文博客写...

如何限制SQL SERVER用户对表和字段的删除添加权限?

使用sqlserver2000已经五六年了,但对于sqlserver的使用,一直也在边缘阶段,除非有特殊问题,才专门研究一番;有朋友是做IDC的,最近在一块讨论,说有一个客户,是自己写的asp程序,最...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。