前几天写过一篇文章:秋色园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。
根据这个情况,我在想,对于小站点,不断用多线程发送请求,造成日志快速增长,把对方空间给挤死,哈哈,好邪恶!!!