zoukankan      html  css  js  c++  java
  • CPU百分百

    前几天写过一篇文章:秋色园CPU百分百的原因分析

    由于上文有介绍了一些前因后果和中间过程及基础的内容,所以怎么发生的,中间大体做了什么检测,就不重复写了,下面写一些事情的后续发展。

     

    在解决完上文说的,搜索引擎引发的命案后,有网友给秋色园做了下压力测试,链接数直上1-2千,导致CPU挂了。

    一:URL缓存可能存在的攻击命案:

    复制代码

    当时我一路正远程用SQL事件探查器和性能计数器观看着,发现IIS并发链接数直接上千,不停的产生SQL语句, 导致数据库占用CPU直接满了,网站挂了打不开。

    从这里,我发现了系统上存在一些逻辑上的不和谐:

    比如:http://www.cyqdata.com/tech/cate-19,秋色园网站的缓存,基本上是基于URL来缓存的。

    而对方发起的压力测试,则并发产生了数百个: http://www.cyqdata.com/tech/cate-19-Nxxxxxxx这样的网址。

    由于URL的变化,所以不停的产生新的页面查询,造成数据库不断的查询,持续的并发查询数据库CPU直接满了,挂了。

    对于这个问题,我进行了全面的URL参数处理,在未读取数据库之前,就判断参数的合法性,和逻辑上的调整,把跳转检测的函数放在前面,其它读取的放后面,这样无效的地址也不会引发不必要的数据库语句查询或逻辑。(全站有好几个,都存在这种情况,都同样的方式处理了)。

    复制代码

    根据这个规则,大伙就要注意了,根据URL地址缓存的逻辑,或动态生成静态页面逻辑的,还是要细心的检测一下。 

    二:DZ论坛的小检查

    现在有好多论坛,好多个人站都运行在VPS或虚拟机上,我跑过去看了下,试图想找到一些动态处理的页面,来进行下压力测试,结果发现除了登陆发贴等少数动态的,几乎全站静态。

    通常的说,搜索这块,通常都是动态的,而且也比较消耗时间的,我一搜,发现,真聪明,DZ直接引用了Soso的搜索服务,把压力转移了。

    三:网站并发压力测试工具

    好多人问题是用的什么工具,网友用的是Apache自带的ab.exe,只要安装了Apache,目录下就有这工具了,一条简单的命令行就能简单的对某网址进行压力测试。

    不过有个限制,一般最多是64个并发,比在线并发测试网站默认提供的15个免费并发好多了,Linux下有几篇文章有说修改并发数的,却没找到在windows下怎么修改并发数上限的方法,有知道的说一声。

     

    四:一个未知的线程死锁:

    复制代码

    这个问题,在本地时测试时出现过几次,出现的时候,我也很积极的Dump,通过processxp工具也能看到2个线程各占20%,持续时间长,就是不下来,然后没有更多信息了。

    Dump是个悲催的事,真心不擅长,来来回回几个命令,就是不见啥信息,几年前我Dump过一次,几年后,还是Dump在那水平,悲催的岁月,发现不了问题所在。

    折腾许久许久后,放弃了,后来一直在大力重构,好多代码逻辑删除了,重写了。

    之后,这问题也失踪了,许久也没再出现过,不知道是不是意外的存在被我删除的代码中。

    复制代码

     

    五:系统磁盘空间不足引发的命案:

    复制代码

    刚刚有微博用户给我留言,说秋色园打开报错,提示硬盘空间不足,我赶紧远程登陆看了一下,C盘只剩下128K,-_-.....

    先临时清了点东西,出了一百多M,恢复了系统运行,然后找是谁吃了硬盘空间:

    不看不知道,一看吓一跳,原来是IIS日志吃了近7个G的日志(VPS上一般C盘就10G)

    我打开日志,看都写了啥日志。。一看吓傻了,都是压力测试时产生的请求,一个日志近500M。

    根据这个情况,我在想,对于小站点,不断用多线程发送请求,造成日志快速增长,把对方空间给挤死,哈哈,好邪恶!!!

    复制代码
    人生有两出悲剧,一者执意寻死,一者无力求生,你全包了。[偷笑]

     

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
     
  • 相关阅读:
    【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题
    修改json对象的每一个值
    浏览器各个版本和系统(chrome/safari/edge/qq/360)
    数据库书籍推荐排行榜
    git-将dev代码合并到test
    npm install报错
    slice()和splice()区别
    在Eclipse中使用JUnit4进行单元测试(初级篇)
    [转载]Jmeter那点事·ForEach和If控制器
    java语言写文件内容
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2981216.html
Copyright © 2011-2022 走看看