王骏的BLOG
编程、网络技术点滴...
<2005年2月>
303112345
6789101112
13141516171819
20212223242526
272812345
6789101112
公告

留言簿(24)

随笔分类

随笔档案

文章分类

文章档案

相册

WEB开发

相关链接

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-61 文章-5 评论-247 Trackbacks-0
朋友的WEB服务器一直运行正常,但这几天CPU占用率一直将近100%,遂去看个究竟。
服务器采用Windows 2003, 网站使用ASP+Access数据库, 查看进程列表发现w3wp.exe 占用了70%以上的CPU,
查看WEB日志,站点访问量不大,查看TCP连接也不多。用net stop w3svc停掉WEB服务,CPU占用立即正常,net start w3svc启动WEB后不久现象又出来了。停止所有虚拟站点,新建一个虚拟站点发现并没有问题,怀疑是站点本身的代码问题。
检查首页代码,大致是如下结构:
<!--#include file="conn.asp"-->
<%
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open 
"SELECT * FROM mytable", conn

do while not RS.EOF
    Response.Write RS(
0)
    RS.Movenext
loop
RS.Close
Set RS = nothing
%
>

粗看一下并没有问题,但就是这段代码造成了w3wp.exe占用大量CPU,难道是死循环?似乎没有理由。在循环体内加入计数,发现确实是死循环,说明RS.EOF一直为false,加入如下代码:
if RS.EOF = true then Response.Write "EOF is true"
if RS.EOF = false then Response.Write "EOF is false"
发现输出竟然是EOF is true EOF is false, 说明无法判断RS.EOF的值,为何如此百思不得其解。检查数据库,发现库中并没有mytable表, 如果该表不存在,RS.Open "SELECT * FROM mytable", conn 就会出错,为何没有出错,很有可能捕获的异常被忽略了。
检查包含文件conn.asp, 发现了异常处理代码:
On Error Resume Next

原来问题在此。

On Error Resume Next忽略了查询表时的失败以及后续的错误,造成进入死循环。

那为何网站本来运行正常,现在却找不到mytable表了呢?仔细检查网站才发现“有‘客’自远方来”,上传了后门工具、删除了多张数据表,害我忙活了一天。

posted on 2005-02-24 16:52 王骏的BLOG 阅读(1945) 评论(4)  编辑 收藏
Comments
  • # re: WEB故障排除一例
    玻璃小屋
    Posted @ 2005-02-24 23:15

    啊~~~~~~~~~~~~~~~~~~~
  • # re: WEB故障排除一例
    freedk
    Posted @ 2005-02-25 09:05
    “有‘客’自远方来”,忙亦乐呼......
  • # re: WEB故障排除一例
    永远的apache
    Posted @ 2005-03-04 11:35
    不错不错。。厉害。
  • # re: WEB故障排除一例
    CM
    Posted @ 2005-07-06 15:51
    多谢。很有帮助.
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]