便宜做网站,不用客户动手特价999元,源码整套仅需50元起
客户同一个服务器上防止了300个左右的站点,因为每个分站一套程序,所以就很多。于是出现了部分站点访问不了的情况。这个问题是因为网站扛不住那么多的访问,出现了访问拥堵的现象。在这个过程中我们会尝试了非常多的办法,后边回帖出来。
这次问题的特征是:
1、服务器并不卡,一切正常,但就是部分网站会出现打不开现象,也不是直接报错,就一直等待中。
2、重启服务器之后,会变好,但等待一阵子又不行了。
3、服务器内存占用从1G多点,不停的涨,涨到3G左右基本稳定(服务器物理内存4G)
4、有的站点打开很慢,但已经能打开的站点速度却很快。【根据这个特征,判断的应用程序池太多问题】
解决办法是:拦截不要的爬虫,把一些攻击的IP拉进黑名单。问题得以解决。
如果想要后续更稳定,其实可以考虑升级内存,因为这个内存目前实在是太小了,才4G。后续如果是访问量比较大,一定还会出现这些问题的。在解决这个问题的过程中,我们用了很多种办法,以下是解决的历程:
一、怀疑是程序池太多了。
应用程序池数量太多了,服务器配置承载不了那么多,于是给多个站点合并用一个应用程序池。我采取的办法是,根据英文首字母,改成a、b、c……大概有十几个应用程序池,问题解决!
解决办法就是:合并程序池,把程序池变少一些即可。
尝试了之后,发现依然不行。
二、怀疑是虚拟内存之类引起的。
因为当时服务器配置低,用了iis2003,后来复制出来比较多的站点。导致网站服务器承受不了了。搬迁服务器之后感觉配置还可以,但依然会出现打不开的现象,观察下来也没有攻击之类的。看来是服务器环境问题。
找了很多资料,感觉是分页文件,虚拟内存的问题。也设置了多次,甚至是给虚拟内存取消掉,也是不行。后来发现可以看日志找原因,最后锁定是:Timer_MinBytesPerSecond 和 Timer_ConnectionIdle的错误。
看了一下资料,是这样解决的:
在网上搜索,找到关于win 2003 iis6.0的一个httperr的日志记录,位置:C:Windowssystem32LogFilesHTTPERRhttperr*.log,在其中发现许多Timer_MinBytesPerSecond 错误或 Timer_ConnectionIdle 错误 Number_Connections_refused 错误,终于找到了相关的错误提示,现在就是与这有关吧!
对于Timer_MinBytesPerSecond 错误或 Timer_ConnectionIdle 错误,网上解释与iis设置有关,可以通过如下解决:
1) 从 IIS 管理器右键单击 Internet Information Server (IIS) 管理器级别根目录上并转到属性。 选中要启用直接编辑元数据库框。 单击确定。
2) 在记事本中打开 C:Windowssystem32inetsrvMetaBase.xml 文件,
搜索MinFileBytesPerSec,将 MinFileBytesPerSec 设置从 240 更改为 0。
搜索ConnectionTimeout,将 ConnectionTimeout 设置从 120 更改为 600。
MinFileBytesPerSec如果不在C:Windowssystem32inetsrvMetaBase.xml 文件 就是在C:Windowssystem32inetsrvMBSchema.xml 文件。
3) 重新启动 IISAdmin 服务以更改生效。
对于Number_Connections_refused 错误,可以通过如下解决:
要变通解决此问题,请将该 EnableAggressiveMemoryUsage 注册表项添加到以下注册表子项中:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParameters
然后,将 EnableAggressiveMemoryUsage 注册表项设置为 1。
要这样做,请按下列步骤操作:(最好备份注册表)
单击 开始 ,单击 运行 ,在 打开 的框中键入 regedit ,然后单击 确定 。
单击下面的注册表子项:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesHTTPParameters
在 编辑 菜单上指向 新建 ,然后单击 DWORD 值 。
键入 EnableAggressiveMemoryUsage ,然后按 Enter 键。
在 编辑 菜单中上, 单击 修改 。
在在 数值数据 框中键入 1 ,然后单击 确定 。
在 文件 菜单中上, 单击 退出 以退出注册表编辑器。
重新启动 HTTP 服务。 要这样做,请按下列步骤操作:
单击 开始 ,单击 运行 ,在 打开 的框中键入 cmd ,然后单击 确定 。
在命令提示符键入 net stop http / y ,然后按 ENTER 键。
在命令提示符键入 iisreset /restart ,然后按 ENTER 键。
还没有人来评论,快来抢个沙发吧!