今天主机CPU跑满,网站无法访问。。。

  • A+
所属分类:wordpress

今天凌晨开始蚂蚁博客就是宕机了,主机CPU跑满(100%),网站打不开了,一直持续到中午我才发现,于是赶紧联系了阿里云的客服,按照指引,创建了工单,最终才得以解决问题,下面大概的给出过程和排查方法。

今天主机CPU跑满,网站无法访问。。。

阿里云的售后工程师给出的处理意见:

[ 处理意见 ] 查看您的主机运行正常,查看您之前已经重启过服务器,现在测试网站打开已经正常,查看之前是因为主机CPU跑满导致,请了解,谢谢。

阿里云售后提示您: 1.对于涉及到文件操作(包含数据库)、配置调整等,建议您先通过控制台进行备份或本地进行文件备份,以免误操作带来的数据丢失风险。

2.建议您将需求、报障信息或测试结果等提供完整,以便我们协助您定位问题。

主机CPU为什么会跑满?平时那段时间的访问量一般不大呀~

售后工程师 : 这个需要您排查程序代码,参考:

网站耗资源和脚本超时常见原因分析

问题描述:

独享云虚拟主机与共享云虚拟主机出现耗资源cpu跑满,或者因为耗资源被关停。

问题原因:

1、程序出现死循环。

2、程序有嵌套查询。

3、采用access数据库,数据库较大。

4、数据库索引较差。

以上问题都会引起服务器资源浪费,甚至耗资源异常情况。

解决方案:

1.程序死循环

出现死循环很多情况下是因为程序缺少必要的检测和判断条件导致,这种情况需网站开发对站点程序的代码进行检查和完善。

2.程序有嵌套查询

  1. 嵌套查询代码示例:
  2.     sql = "select * from a"
  3.     set rs = server.createobject("adodb.recordset")
  4.     rs.open sql,conn,1,1
  5.     while not rs.eof
  6.             sql2 = "select * from b where fid=" & rs("id")
  7.             set rs2 = server.createobject("adodb.recordset")
  8.             rs2.open sql2,conn,1,1 '使用嵌套查询,效率会出现下降
  9.                   while not rs2.eof
  10.                     response.write rs("id") & "=" & rs2("name")
  11.                     rs2.movenext
  12.                   wend
  13.             rs.movenext
  14.     wend
  15.   嵌套查询会造成数据库的查询量呈指数级上升,导致一个程序的效率非常低,上面的程序如果改为连表操作,查询数据库的次数会少很多,并且在设计数据库的时候应该将 b 表的 fid 字段建立索引,否则连表查询的时候性能会差很多。
  16.   <%
  17.     sql = "select a.id ,b.name from a left join b on b.id=a.id" '使用连表操作,并用具体的字段名代替 *,程序是高效很多
  18.     set rs = server.createobject("adodb.recordset")
  19.     rs.open sql,conn,1,1
  20.     while not rs.eof
  21.             response.write rs("id") & "=" & rs("name")
  22.             rs.movenext
  23.     wend
  24.   %>

3.网站采用 access 数据库,数据库的容量比较大

如果采用access数据库,当数据库的容量比较大(比如超过 100M 以上),性能就可能会出现问题,所以访问量大的网站一般都采用 sqlserver、mysql、oracle 等性能比较高的数据库引擎。

4.数据库的索引没建好

一个表至少有一个主键和N个外键,一般主键作为表的唯一标识。当检索数据时,如果以主键的值来进行查找的话效率会比较高,而一些标志性的字段,如产品表的产品所属分类、用户表的用户等级等,如果在程序中经常要用到这些字段来进行检索数据,那么一般应该为这些字段建立索引,这样检索数据的时候性能会好很多。

从上面的分析可以看出,至少不会是第三条,因为我的博客采用的是MySQL,而非access;目前最有可能的情况是程序出现死循环,当然,这也要去进一步验证才能确认。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: