IIS6.0服务器,虽然说已经是比较经典实用的服务器,但是还是有人会对其议论纷纷,最近一个网站,老是出现应用程序池的错误,甚是纠结,所以相关人员就总结了网上一些比较有价值的文章,整理梳理一下,顺便也提出一些自己的观点给大家,给大家网站建设教程增加点知识。
做过网站管理的人都知道,网络上有关IIS6.0 服务器的问题和相关解决方案,数不胜数,当时并没有多少比较系统的解决方案;另外,有些解决方法,似是而非,不能找到其中的问题关键点,笔者平时对于服务器的应用上也有点实践,因此,今天稍稍总结一点平时遇到地问题和解决方法分享给大家,特别是对IIS的特殊权限引起问题、IIS应用程序池假死问题和比较罕见的 IIS6.0 重启命令和自动重启办法。
第一个常见的问题就是Windows Server 2003应用程序池自动死了,不能恢复了,一直出现 Service Unavailable这个问题,这种常见的解决方案如下:
1、这可能是因为没有打2003的SP1补丁而出现这个IIS6.0假死问题,但现在微软都在自动更新里面出补丁了,一般你打好最新补丁后就不会再出现此问题了。
2、众多周知,从IIS6.0服务器(当然IIS7.0更不要说了)开始CPU资源都在应用池里面限制了,这不像以前的IIS5.0。所以假死的池的真正“凶手”就是应用程序池被卡死,这个时候如果你登录服务器可以看到,在网站打不开的时候可以看到相应的应用池是禁用的,上面出现一个红叉。这个时候点击鼠标右键启动网站就会自动恢复。 出现这个现象大概是以下几个因数造成的:
①你限制了应用池的资源,限制得太小以至于卡死。 这个时候如果你这个池下面的网站占用CPU太高,比如CPU超过50% 那么5分钟后他就自动死了,手工默认建立的应用池默认是超过资源不操作。
②内存限制。在IIS6.0应用池上面有虚拟内存和最大内存限制,如果你设置了这个。那么网站访问量大了 也会出现假死,所以不建议设置这里。默认就可。
3、服务器自身内存太小,网站运行当然需要使用到内存了,当内存不够的时候应用池也会死掉变成禁用。那么只有等内存全部释放出来才能恢复应用池了。出现这个情况的时候你就要考虑加内存或者检查到底是什么程序占用了内存了。比如MSSQL数据库,这个是很占内存的,最好别和WEB服务器同时存在于一个服务器上。很多人用1G内存做Server 2003系统,要知道2003NET结构是很占用内存的,所以做服务器选2003还得把内存加到2G或更高才好。 内存不够上面 2点讲到的,是没办法操作了,也无法自动恢复。
4、ACCESS数据库!这是一个太常见的问题,因为数据库太大或查询太多,就会出现把IIS服务器卡死的现象,这个时候的解决方法就是修复ACCESS数据库,或尽量少用ACCESS数据库,如果条件允许的话可以直接升级至MSSQL数据库,当然你也可以选择在技术方面革新,比如说全站生成静态功能等。
5、不同网站用不同应用池:根据你自己实际情况而定,站点大的最好独立一个应用池,限制它的资源超过了自动回收,这样就不影响其他站点。中型站点可以多个网站共用一个应用池,比如4或者6个个站点用一个池,设置资源回收的时间等等。这样就算超资源了也不影响其它应用池的网站。
6、设置回收时间。很多人以为设置回收池越短越好,其实是错误的,每次回收当然是把内存回收回来了,但加重了一次服务器的负担,当服务器比较繁忙的时候,有可能导致其他应用池死。所以建议设置共1000就行了。其他独立池按照他网站流量而设置 可以设置600 也行,共用的不建议设置太短。
8、网站后台过不了多久自动退出又要重新登陆:这个情况就是你设置回收时间太短了,按照 6点设置吧。 不要设置什么20分、30分这样的,这样不好的。另外一个原因就是和站的响应设置时间有关,设置得稍长些。
9、windows 2003系统IIS6.0访问本机的站点时提示“Service Unavailable”;
查看iis的应用程序池,状况提示为:未指定错误,同时应用程序池自动停止运行;
用事件查看器查看系统错误日志,发现如下提示:
应用程序-特定 权限设置未将 COM 服务器应用程序(CLSID 为{A9E69610-B80D-11D0-B9B9-00A0C922E750})的 本地 激活 权限授予用户 NT AUTHORITY\NETWORK SERVICE SID (S-1-5-20)。可以使用组件服务管理工具修改此安全权限。
解决方法,给NETWORK SERVICE 加上访问iis服务的权限,具体方法是点击“开始”-“控制面板”-“管理工具”-“组件服务”-“计算机”-“我的电脑”-“DCOM”选项,选择其下的“IIS ADMIN SERVICE”,右健选择“属性”,找到“安全”,在“启动和激活权限”中编辑“自定义”,添加帐号“NETWORK SERVICE ”,给该帐号赋予“本地启动”和“本地激活”的权限,重新启动IIS之后再访问同一站点,则一切正常。
接下来我们说一下重启IIS中的特定应用程序池命令和自动重启的方法。
在操作系统是Windows server 2003 SP1+的情况下,可以用以下命令部分重启IIS应用程序池:
cscript.exe c:\windows\system32\iisapp.vbs /a "DefaultAppPool"
其中/a 代表alternatively,"DefaultAppPool"代表应用程序池的实例名。
如果要设置自动重启这个应用程序池,可以尝试放在批处理中,用计划任务调用此批处理即可。很多人觉得计划任务不安全,都要禁掉,事实上,计划任务的不安全是建立在其它方面不安全的前提上的,如果由于其它方面的不安全,被放入执行程序,计划任务执行,这和计划任务没有直接关系。但是我们也不得不说的就是关掉肯定会在一定程度上减少安全隐患。
总之IIS服务器管理和维护是一个慢慢积累、慢慢实践的过程,许多解决方法并不是绝对的,也不是唯一的,这就需要人员的细心以及解决办法的能力比较强。