zoukankan      html  css  js  c++  java
  • 了解IIS6应用程序池假死问题解决办法

    为应用程序池 'AppPool #1' 提供服务的进程关闭时间超过了限制。进程 ID 是 '3000'。

      出现上面情况后,该应用程序池对应的网站就访问的非常慢,几乎是打不开。

      这种现象是不是iis假死?

      重启下该站点,问题可以得到解决。

      可能是应用程序池设置问题,不知道具体应该怎么设置!

      请高手指点。

      解决办法:

      1 设置进程池回收时间.在进程池属性里.

      2 如果你的程序是使用 asp + acc 数据库.且acc数据库大于30m.建议更换sql数据库. acc数据库大于这个值.2003系统下会造成iis6的频繁假死.2000下会造成dllhost.exe占用大量cpu及内存资源.都会严重影响 web访问速度.

      3 asp程序存在死循环.

      4 可使用 microsoft office 压缩修复acc数据库,须先备份.

      经常见到大家谈起,2003应用程序池自动死了,不能恢复了,一直出现 Service Unavailable 常见方法如下。

      1:以前没有SP1打补丁的时候会出现这个IIS6。0假死问题,但现在微软都在自动更新里面出补丁了,一般你打好最新补丁后是不会出现此问题了。(所以现在的IIS假死与这个关系不是很大)

      2:从IIS6.0开始CPU资源都在应用池里面限制了,不象以前的IIS。5。所以假死的池的缘故就是池被拉死,你在网站打不开的时候可以看到你的某个 应用池是禁用的,上面出现一个红叉。你鼠标右键启动网站又会自动恢复。 这个原因:大概是以下几个因数造成的。

      (1):你限制了应用池的资源限制,限制得太小 比如:50这样或更少更多一点,这个时候如果你这个池下面的网站占用CPU太高,比如超过50% 那么5分钟后他就自动死了,手工默认建立的应用池默认是超过资源不操作。

      出现上面这个情况解决方法:1:不限制CPU资源,(这个是不可取的,不限制资源,有的程序有BUG占用资源厉害了的,服务器都会被拉死,你可能都无法操 作服务器。)2:在超过资源那里选择 关闭,这个关闭默认是失败5次,90秒内恢复,一般默认就可。网站能自动恢复,这个关闭:不是永久关闭,意思是超过资源关闭,然后在某时间内自动恢复池。 不操作就是不恢复,这个是很多人的误区。上次我写过相关的这个讲解了。

      (2):内存限制 在IIS6。0应用池上面有虚拟内存和最大内存限制,如果你设置了这个。那么网站访问量大了 也会出现假死,所以不建议设置这里。默认就可。

      3:就是服务器自身内存太小,网站运行当然需要使用到内存了,当内存不够的时候应用池也会死掉变成禁用。那么只有等内存全部释放出来才能恢复应用池了。出 现这个情况:那么你就要考虑加内存或者检查到底是什么程序占用了内存了。比如MSSQL数据库,这个可是吃内存得大户啊,最好别和WEB服务器同时一个服 务器上。很多人用1G内存做 2003系统,2003NET结构是很占用内存的,所以做服务器选2003还得把内存加到2G或更高才好。 内存不够上面 2点讲到的,是没办法操作了,也无法自动恢复。

      4:就是ACCESS数据库太大或查询太多,这个也会出现把IIS拉死,解决方法;修复ACCESS数据库,或尽量少用ACCESS数据库。

      5:不同网站用不同应用池:根据你自己实际情况而定,站点大的最好独立一个应用池,限制他的资源超过了自动回收,看上面 (1)讲到的,这样就不影响其他站点。 中型站点:多个网站共用一个应用池,比如5个站点用一个池,设置他资源时间等等。这样他们就算超资源了也不影响其他应用池的网站。

      6:设置回收时间:很多人以为设置回收池越短越好,其实是错误的,每次回收当然是把内存回收回来了,但加重了一次服务器的负担,当服务器比较繁忙的时候, 有可能导致其他应用池死。所以建议设置共1000就行了。其他独立池按照他网站流量而设置 可以设置600 也行,共用的不建议设置太短。

      7:网站后台过不了多久自动退出又要重新登陆:这个情况就是你设置回收时间太短了,按照 6点设置吧。 不要设置什么20分、30分这样的,这样不好的。

      前面我们了解了IIS 6.0体系结构的关键组件,下面来看看有关应用程序池的一些问题。应用程序池的"属性"对话框有四页--回收,性能,运行状况,标识,如图六所示。在这些 选项页中,最引人注目的恐怕就是"回收"页,使用该选项页可以管理工作进程的回收。在工作进程隔离模式中,

      IIS可以配置成定期重新启动应用 程序池中的工作进程,从而更好地管理那些有错误的工作进程。这确保了池中的应用程序运行正常,并且可以恢复丢失的系统资源。为了回收工作进程,失败工作进 程接收请求的能力将被限制,直到它处理完存储在请求队列中的所有剩余请求。为了排出当前请求,可以给予进程配置限制。同一命名空间组的替换工作进程在旧的 工作进程停止前启动,从而防止服务中断。旧的进程完成其未决的请求,然后正常关闭,或者如果在达到了配置的时间限制、请求数、设置的时间计划,或当达到指 定的内存用量限制后仍没有关闭,则明确地终止进程。默认情况下,应用程序池每隔1740分钟(29小时)回收一次。

      W3SVC根据"运行状况"页的选项来判断应用程序池运行是否正常,包括:每隔指定的时间Ping工作进程,时间按秒计,默认值30秒;启动时间限制(工作进程必须在 指定的时间内开始);关闭时间限制(工作进程必须在指定的时间内关闭);是否启动快速失败保护(如果在指定的时间段内一定数目的工作进程发生失败,则禁用 应用程序池)。另外,ISAPI应用程序(包括ASP.NET和asp.dll)可以声明自己不再适合提供服务,要求回收。

      默认 情况下,当IIS 6.0回收一个池时,它会使用一种称为overlapped recycle的回收技术。在这种回收模式下,失败的工作进程仍会保持运行状态,同时创建一个新的工作进程。IIS 6.0把新传入的请求传递给新的工作进程,但不拆除老的工作进程,直至老的工作进程处理完它队列中的请求,或者遇到超时错误。在此期间,TCP/IP连接 不会丢失,因为有http.sys保持着连接的有效性。当失败的工作进程超时出错时,下一个请求传递给工作进程的请求是新的请求,因此原来保存在进程中的 会话信息就会丢失。所有这类回收操作都自动进行,无需管理员干预,而且在大多数情况下,不会造成明显的服务中断现象。如有必要,可以将配置数据属性 LogEventOnRecycle的值设置为1,指示W3SVC执行回收操作时生成一条事件日志记录。

     对于那些不能以多个实例 运行的应用程序,overlapped recycle回收技术可能引起问题。如果遇到这类问题,可以将配置数据属性DissallowOverlappingRotation的值设置成 True(1),关闭某个应用程序池回收操作时的进程"重叠"现象。另外,对于失败的工作进程,有时我们可能不想将它拆除,仍旧保留该进程,以便检测和寻 找发生问题的根源,这时可以将配置数据属性OrphanActionExe设置成执行文件的名字,使得工作进程成为"孤儿"时执行文件仍保持运行状态。

      另一个与应用程序池有关的特性是,IIS 6.0允许将应用程序池配置成一个Web园(Web Garden)。要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程序,如果IIS 5.0能够自动按照圆形循环的模式将请求依次发送给这些功能上等价、实际上分离的Web网站,将负载分离到三个不同的进程,就可以构成一个小型的Web农 场(Web Farm)--这就是Web园。

      在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。具体的配置步骤是:打开应用程序池的"属性" 对话框,转到"性能"页,在"Web园"下面的"最大工作进程数"输入框中输入进程数量,如图八。当服务器的负载较小,不需要额外的工作进程时,IIS 6.0在一定的时间后(默认20分钟,可配置)自动缩减实际的工作进程数量;如果负载变大,需要额外的工作进程,IIS 6.0再次增加工作进程数量。这一切操作都自动进行,不需要管理员干预。

      

      图八

      两个新的配置数据属性--SMPAffinitze和SMPAffinitzeCPUMask--允许配置为工作进程指派的特定处理器:将 SMPAffinitized属性设置成true表示应该把分配给应用程序池的特定工作进程指派给特定的 CPU,SMPProcessorAffinityMask属性用来配置十六进制的处理器掩码,该十六进制处理器掩码指出应用程序池中的工作进程应该绑定 到哪个CPU。

      写到这里,文章的篇幅似乎已经太长了。本文主要从体系结构的角度介绍IIS 6.0的新特性,并且尽力做到全面,至少要比通常见到的介绍更完善一些。文章的第二部分将涵盖更多的IIS 6.0新特性,你会发现许多新特性正是自己长久以来盼望的。

      前 文介绍了IIS 6.0的安装和Web服务器的新型体系结构。IIS 6.0新特性的数量多得令人惊奇,其中一些特性是如此引人注目,以至于人们的大部分注意力都被它们吸引。在这第二篇介 绍IIS 6.0的文章中,我们不仅将了解这些已成为"明星"的特性,还将关注一下IIS 6.0各种较少有人注意却同样重要的改进之处。

      一、安全

      微软一次又一次地做着同样一件事情--某个软件产品出了问题,饱受人们诟病,于是赶紧发布新的版本将问题解决。例如,发布Windows NT 4.0之后,因稳定性问题而饱受批评;于是微软发布了Windows 2000,新操作系统的稳定性颇受好评,但Win 2K服务器默认安装的IIS 5.0却成了巨大的安全隐患,需要下大力气加以整治才能解决问题。IIS 6.0默认不安装,如果按照缺省方式安装,Web服务器只能提供静态内容服务。因此,从这个角度看,即使以后IIS 6.0应用引擎和组件突然出现了问题,IIS 6.0还是极大地降低了安全风险。另外,Windows Server 2003还有一个新的组策略"禁止安装IIS",有了该组策略,我们就可以禁止Windows 2003在活动目录(AD)森林中禁止不准备作Web服务器用的机器上安装IIS 6.0,防止网络上出现根本无用的、不安全的IIS 6.0服务器。不过,目前这个组策略只对Windows 2003服务器有效,不能防止Windows XP Pro和Win 2K的机器安装IIS 5.0。

      当然,由于刚刚安装好的IIS 6.0不支持动态内容,所以出现了第二个人们经常会问的问题:"为什么我的服务器不能运行ASP?"(前文提到,第一个人们经常会问的问题是:"IIS 6.0可以在Win 2K服务器上运行吗"?答案是"不")。要想在IIS 6.0上运行程序,必须使用IIS 6.0的一种新特性,即Web服务扩展,或Web Service Extension(这个名字似乎意味着它与XML Web服务有某种关系,实际情况并非如此。)

      如果要为某个程序启用Web服务扩展,首先打开IIS管理器(在"控制面板 "→"管理工具"中。以前叫做Internet服务管理器或ISM),如图一,点击"添加一个新的Web服务扩展",启动向导创建一个新的规则。为规则指 定一个名字,然后找到想要启用的执行文件。另外,\system32\inetsrv下有一个iisext.vbs脚本,它也能够配置并管理运行带有 IIS 6.0的Windows Server 2003的Web服务扩展、应用程序和单独的文件。管理员可以使用此脚本来启用和列出应用程序;添加和删除应用程序依赖性;启用、禁用和列出 Web 服务扩展;添加、删除、启用、禁用和列出单独文件。

      

      图一

      在图一中,注意"所有未知ISAPI扩展"和"所有未知CGI扩展"这两种Web服务扩展。默认情况下,这两种扩展是禁用的,意味着除非明确地允许一个 应用在IIS 6.0上运行,否则它就不能运行。如果一个用户请求了某个没有启用的文件,IIS 6.0将向用户返回404错误--文件或目录没有找到,同时在W3SVC日志中记录"

      404.2文件或目录无法找到:锁定策略禁止该请求"。 在IIS 6.0中,404.2和其他子状态代码是W3SVC日志文件的一项可选功能,用来帮助排解故障、疑难(IIS 5.0和IIS 4.0中也有子状态代码,不过不会在日志文件中记录,但可以将它们转到定制的错误页面,便于根据子状态代码执行特殊的处理)。IIS 6.0的子状态代码很有用,它们提供了描述问题的详细信息,例如:403.20,禁止访问:Passport登录失败;403.18,禁止访问:无法在当 前应用程序池中执行请求的URL;404.3,文件或目录无法找到:MIME映射策略禁止该请求;500.19,服务器错误:该文件的数据在配置数据库中 配置不正确。所有这些错误和其他错误都映射到定制的错误页面,错误页面不会把子状态代码发送给用户,攻击者无法获知具体的错误信息。

      另一个安全方面的改进之处是IIS 6.0允许指派一个加密服务提供者(Cryptographic Service Provider,CSP),能够将基于硬件的安全套接字层(SSL)加速器集成到IIS 6.0,从而把加密任务从服务器的通用CPU转移到了专门为加密操作而优化的专用设备,有利于提高性能和可靠性。 在IIS6中每个应用程序池在独立的进程中运行,默认每个应用程序池开启一个进程

     在应用程序池属性的"性能"页,可以设置每个程序池的进程数,如下图

      

      今天修改了论坛(asp程序)配置,把工作进程数改为2个,问题就出来了,论坛用户始终登录不进去!

      在百度找了一下就找到了下面的答案,注意红色部分。

      原来同一程序池中,不同工作进程的会话信息是独立的,如果在登录页面是在进程一中执行,那登录成功的session信息就保存在进程一中。登录成功后转到 另一个页面,如果这时又轮到另一个进程来执行这个页面,那么这个在页面中是访问不到刚才保存的会话信息的,这样此页面就会认识用户是没有登录。

      ------------------------------------------------

      问: IIS 6.0 具有一个名为 Web 园的新功能,有了它,可以将应用程序池配置为使用多个工作进程。IIS 何时创建额外的工作进程?在我们实施 Web 园之前,我们应该了解哪些知识? 答:在您创建应用程序池时,就会通知 IIS 6 创建一个工作进程,以传送指派给该应用程序池的 Web 站点、文件和文件夹的内容。您可以将应用程序池配置为启动多个,而非一个工作进程,这样可以提高可扩展性。这个功能的名为 Web 园,是小型的"Web 农场"。您无需使用多台计算机来传送相同的内容(Web 农场),而是可以使用一台计算机中的多个进程来传送相同的内容。 在将 IIS 6 应用程序配置为 Web 园时,您只需在"应用程序池属性"的"性能"选项卡的"最大工作进程数"框中,设置一个大于 1 的工作进程数。如果这个值大于 1,每个请求都将启动一个新的工作进程实例,可启动的最多进程数为您所指定的最大工作进程数。后续的请求将以循环的方式发送至工作进程。

      Web 园在您的应用程序资源有限的情况下非常有用。例如,如果您到数据库的连接很慢,那么您可以使用多个工作进程来增加用户吞吐量,从而增加到数据库的连接数。

      尽管在有些情况下使用 Web 园的用处非常大,但是要注意,每个工作进程的会话信息都是唯一的。由于请求以循环的方式路由到应用程序池工作进程,因此 Web 园对于会话信息存储在进程中的应用程序作用可能不大。在少数情况下,让多个工作进程运行同一个应用程序会造成资源竞争。例如,如果所有工作进程都试图将信息记录到日志文件中,或是使用那些不是专用于多个并发访问的资源,那么可能出现资源竞争问题。

      如果不存在这些问题,那么 Web 园可能正是您所需的功能之一,而且其作用会非常大。

  • 相关阅读:
    代码4
    readline,readlines,read函数
    代码3
    find函数
    字典的循环和if语句
    代码2
    代码1
    python除法
    字符串
    print函数
  • 原文地址:https://www.cnblogs.com/bingyun84/p/1785948.html
Copyright © 2011-2022 走看看