A、这种情况估计是代码中存在死循环。天哪,网站上有几百甚至上千的文件,如何查找,晕死。
首先,分析一下死循环产生的情况,利用VBScript写ASP的时候,利用循环语句时,可能发生死循环。举例子,最能说明问题:
strSQL=”Select name from user where name=’张三’”
Set RS=Server.CreateObject("ADODB.RecordSet")
RS.CursorLocation=3
RS.Open strSQL,objConn,0,
i=0
DO While i<=5 and Not RS.EOF
i=i+1
‘一些操作
RS.MoveNext
如果RS.MoveNext忘写了,肯定是死了。但这种情况很少发生,要发生这样的错误,将是不可饶恕。
如果SQL语句有错误,由于某种原因条件变为name=”张三”,或者name=张三;本人调试的时候,发现上述的语句是死循环。很纳闷,i<=5应该可以结束循环,但并没有。有兴趣的话,可以试试,至少本人测试是死循环。
解决方案:
a. 改造循环语句,使其更健壮。测试结果显示,可以结束循环
i=0
DO While Not RS.EOF
i=i+1
‘一些操作
RS.MoveNext
if i>5 then
exit do
end if
b. 对于RecordSet对象,如果打开没有记录的 Recordset 对象,BOF 和 EOF 属性将设置为 True,而 Recordset 对象的 RecordCount属性设置为零。打开至少包含一条记录的 Recordset 对象时,第一条记录为当前记录,而 BOF 和 EOF 属性为 False。但是,我在使用中发现,如果有一条记录时,上面的说法并不准确。本人发现有的程序员在判断用户是否存在时,利用了NOT RS.EOF ,这样有可能根据错误的逻辑,造成死循环,建议最好使用RecordCount。
其次,如果上述的方法由于代码太多,行不通。这里有一个很具有针对性的方案。
思路:使用服务器上的MS SQL工具“事件探查器”和“任务管理器”。新建一个跟踪,当CUP达到100%时,请马上“暂停所选择的跟踪”或“停止所选择的跟踪”,然后把所有执行的SQL命令抠出来,粘贴到“查询分析器”中查看是否存在语法错误。
操作图示:
根据存在语法错误的SQL语句,定位可能出问题文件。这一点很重要。
通过上述的数据库优化和对文件中SQL语句的逐一排查,如果还不能解决您的问题。请继续往下看。
3、打开服务器上“管理工具”中的“性能”
操作图示:
跟踪查看每个性能对象的参数:参考下面的图示
请关注套红部分的参数,如果由于访问量的过大,造成CUP负载过大的话,赶快升级服务器的硬件去吧!
【写后感】
本文仅仅是在原有的框架设计基础上进行的优化,一个易用,健壮,安全,并且性能良好的网站,仅上面谈到的还远远不够。请大家把好的框架设计,存储结构及宝贵的经验拿来分享。
【声明】
此文仅是本人的一点经验,不当之处请大家指点。望大家共同参与大型网站优化的讨论。