Java堂  


Zend Optimizer 出错造成站点无法访问

Filed under: Web&Server — Jet @ 3:17 上午
原文出处: Zend Optimizer 出错造成站点无法访问
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天有朋友的服务器出现站点无法访问的状况,登录进去看到Apache占用了服务器的大部分内存导致服务器剩余内存很少,如果重启Apache的话依然无法释放内存,只有重启服务器之后才正常。

查看“事件查看器”中出现一个Zend Optimizer错误,而且这个错误都是每次启动服务器之后产生的:

事件类型: 错误
事件来源: Zend Optimizer
事件种类: 无
事件 ID: 487
日期: 2008-2-28
事件: 9:22:15
用户: N/A
计算机: XXX
描述:
事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能可以使用 /AUXSOURCE= 标识来检索词描述;查看帮助和支持以了解详细信息。下列信息是事件的一部分: Unable to view file mapping, 试图访问无效的地址。

查阅了一下网上的资料,其实只有一个版本,具体内容可以看下面的参考资料。我这里结合自己的解决方法总结一下:

首先如果你的PHP使用了eAccelerator则将其注释掉就可以了,这是因为Zend Optimizer同eAccelerator相冲突。其实二者都是用于加速PHP程序的,只要使用其中的一个就可以了。

如果你的PHP没有使用eAccelerator的话则大部分是权限的问题了,这种情况在Apache+PHP中很少见,通常都是在IIS+PHP这种搭配中出现的比较多。这个时候只需要修改%SystemRoot%\Temp的权限,设置为EveryOne全部允许;然后如果该目录下没有ZendOptimizer.MemoryBase@SYSTEM文件的话就手动新建一个文本文件然后命名为ZendOptimizer.MemoryBase@SYSTEM即可。

如果还是有问题的话可以查看一下php下的ext目录中是否有php_yaz.dll和php_zip.dll两个文件,有哪一个就在php.ini将 “extension=…”前面的分号去掉。

做完上面的操作之后如果依然出现问题的话请在下面留言或给我mail,可以再继续探讨。

[后续(2008.3.4):]做完上述的操作之后依然出现上面的错误,不过错误出现的次数少了而已,最后不得已将Zend卸载掉了。现在感觉好像应该是Zend Optimizer的一个bug吧。

参考资料:
事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。
解决“事件ID(487)的描述(在资源(Zend Optimizer)中)无法找到”问题

让IIS支持中文文件名和目录

Filed under: Web&Server — Jet @ 5:16 下午
Tags: ,
原文出处: 让IIS支持中文文件名和目录
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

默认情况下,无论是IIS5还是IIS6对中文路径或文件名支持的不是很好,主要表现为:图片中含有中文路径显示无法找到网页;含有中文的文件直接使用IE下载的时候出现无法找到的错误等等。

其实解决方法很简单,只要修改一下服务器的注册表即可。打开注册表中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\,将右侧的FavorDBCS设置为0,然后重启IIS即可。如果服务器上安装了UrlScan的话还需要将AllowHighBitCharacters打开。

参考资料:
IIS5不支持中文目录的解决办法

解决dllhost占用CPU 100%的免费方法

Filed under: OS,Web&Server — Jet @ 8:52 上午
原文出处: 解决dllhost占用CPU 100%的免费方法
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

如果在Windows系统中造成CPU100%的话系统会产生延迟,反映到用所访问的站点上面就是等待的时间加长。其实是一个非常复杂的问题,但是如果是因为dllhost占用了CPU100%的话,绝大多数情况下跟IIS有关。产生这种现象的原因主要是:IIS调用ASP组件(即包括自身的也包括第三方的)的时候出现错误,比如IIS无法找到程序中所调用的组件、Access数据库损坏造成ASP操作线程死锁等等;另外一个就是可能中了冲击波病毒,这样只要找一个专杀工具就可以了,本文不在予以描述。

因为所有的IIS组件操作在任务管理器中都是显示的dllhost.exe所占用的状况,如果想查看具体IIS中哪个部分进行操作可以通过“组件服务”来查看。在控制面板中依次打开“管理工具”-“组件服务”,然后依次选择打开“组件服务”-“计算机”-“我的电脑”-“COM+ 应用程序”,然后在上面右键选择菜单中的“查看”-“状态”,这样可以显示正在运行的组件部分。

但是上面的操作只能粗略的查看,很多时候并不能找到出现问题的哪个部分。如果通过百度或者Google搜索的话绝大部分的文章都是提到使用某公司的产品进行监视(明显应该是软文,看来这家公司推广做的不错,呵呵),其实完全没有这个必要,下面同大家分享一下我解决问题的过程。

如果站点中含有Access数据库文件的话首先不管三七二十一先把这些文件用Access压缩修复一下,如果还出现这个问题的话就证明不是Access数据库的问题了。

其实只要能检测IIS执行的时间以及网址(包含参数)并记录下来,然后查看执行时间比较长的链接就是造成CPU100%的罪魁祸首。问题的关键主要是找到出现问题的链接,开始我想自己写一个ISAPI筛选器进行监视,后来无意中发现IIS自带的日志模块本身就有这个功能。右键站点然后选择“属性”打开“网址属性”对话框,在“网站”标签里面最下面选中“启用日志记录”,这里“活动日志格式”一定选择“W3C 扩展日志文件格式”,其他格式没有执行时间选项。这个时候点击右边的“属性”按钮,在“扩展属性”标签“扩展日志记录选项”中选中“URI资源”(执行操作的网址)、“URI查询”、“协议状态”、“所用时间”(后面就基于此选项的内容进行分析)这几个选项。这样记录下来的日志里面就符合我们的要求了,等到发现dellhost又出现CPU100%之后过一段时间(这是因为IIS为了提高操作效率其日志记录中含有一个操作池,只有达到设定的条件之后才会将池中的内容写入到文件中)之后就可以根据执行时间来救出造成dllhost100%的程序文件了。

有的时候系统中不止一个地方出现问题,所以上面的方法可以重复使用。如果这样操作之后还是有问题的话那应该就是IIS自身的问题了,这个时候需要重新安装初始化IIS,具体的方法可以查看火锅城市空间的文章。另外这篇名为《关于站点程序或者ACCESS出错导致DLLHOST.exe占用CPU达100%的监测办法》的文章也值得一读。

参考资料:
dllhost.exe 100% cpu
dllhost.exe CUP使用率100% 解决方法

让WindowsXP中的IIS支持多站点的工具

Filed under: OS,Tools — Jet @ 4:48 下午
Tags: ,
原文出处: 让WindowsXP中的IIS支持多站点的工具
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

众所周知,在XP professional中使用IIS不能创建多个站点,虽然我们可以使用“虚拟目录”来调试程序,但有很多时候并不方便。今天无意中发现一个可以创建多站点的工具-IISAdmin,下载地址:http://www.firstserved.net/download/iisadmin.zip

程序非常简单,界面如下:
iisadminfull.gif
使用“create”创建一个新的站点,可以设置站点描述、端口号以及站点的位置。软件没有设置“编辑”功能,如果需要对站点进行编辑处理的话可以使用IIS进行编辑,这个时候打开IIS之后会发现刚才创建的所有的站点都已经显示在列表中了。

点击软件中的“start”可以启动选中的站点,细心的朋友可以注意到的是每次只能启动一个站点。如果我们在IIS中同时启动两个站点的话会出现一个“不支持请求”的错误提示。所以这个软件很巧妙的解决了在XP中IIS不能创建多个站点的问题(这一点应该是被IIS所屏蔽了),但没有从根本上解决同时启动多个站点的问题,我想这个应该是XP系统底层对IIS进行的限制,基本无法突破。不过这样对于我们调试程序来说已经足够了。

软件同时还可以了重新启动IIS的功能,其实是调用了软件中所包含的iisreset程序,类似于iis6中自带的功能,非常的方便。软件还支持Windows 2000 Professional和Windows Vista Business系统。

最后需要注意的一点是如果使用IISAdmin删除一个正在运行的站点,则如果再启动另外一个站点的时候会出现如下的错误:
iisadmin_error.png
这个时候IIS中所有站点也会出现红色的图标,无论做任何操作都是提示“不支持请求”。这个应该是软件的一个bug,解决的办法是重启一下IIS就可以了。

小心翼翼地使用IIS

Filed under: OS,Web&Server — Jet @ 4:54 上午
Tags:
原文出处: 小心翼翼地使用IIS
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

今天又一次“体验”到了IIS的脆弱,晚上添加更新一个新站点的时候不知道为何先是出现“HTTP1.1连接错误”,然后又出现如下的“Server Application Error”:

Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.

后来从网上查阅了一些资料,但是依照上面的做法依然出现上述“Server Application Error”,并且重新安装了好几次IIS。因为我在执行

  1. cscript.exe synciwam.vbs -v

命令的时候出现的不是资料中所示的”Error: 8004E00F:”错误,所以最后根据资料中的方法一直不能解决。

就在心灰意冷准备重装系统的时候,我在卸载IIS的时候发现出现如下的错误信息:

在处理 OC_COMPLETE_INSTALLATION 安装信息过程中子组件 COM+ 产生了一个意外错误。

..\csetuputil.cpp (行 3419)

错误代码 = 0×8007007e

找不到指定的模块。

加载库 C:\WINNT\System32\comsvcs.dll失败。

但是我查看在system32目录下面存在comsvcs.dll文件,为什么提示加载失败呢?并且再次安装IIS的时候也出现了上面的错误提示。

最后我重新下载了一个原始的comsvcs.dll文件强制覆盖(感谢Brick的提醒,应该从System32\dllcache中拷贝comsvcs.dll文件,这样比较符合自己系统的要求),重启之后再次卸载安装IIS都无任何提示,而且运行asp程序也正常了。

参考资料:
IIS出现server application error,请问怎么解决?
IWAM账号的密码错误造成了HTTP 500内部错误
IIS服务器错误Server Application Error最有效最详细的解决方案