首頁  >  文章  >  php教程  >  一个探针足矣毁掉一台服务器

一个探针足矣毁掉一台服务器

WBOY
WBOY原創
2016-06-06 20:08:362246瀏覽

探针,可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息,还能进行服务器性能测试。深受各种站长的喜爱,我也不例外…… 也许很多站长也和我一样,喜欢在自己的网站上放个探针,有事无事观察观察自己的环境,亦或者公开给大家观

探针,可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器时间等信息,还能进行服务器性能测试。深受各种站长的喜爱,我也不例外……

也许很多站长也和我一样,喜欢在自己的网站上放个探针,有事无事观察观察自己的环境,亦或者公开给大家观赏。

不过,今天我要告诉大家,这是极度危险的一件事情,那个小小的探针可能就成为KO你服务器的凶手(我不是指探针透露的环境信息)!

就以雅黑探针为例吧。玩了那么多年探针,我们应该知道,探针最耗资源的一项就是浮点运算能力检测了,这需要占用大量的CPU去进行运算,点一次,可能占用的资源不太多,但是,如果你连续点击多次的话……

浮点测试

上图是我连续点了“浮点测试”多次后的结果,我的CPU是I3 2120,可以看出,CPU占用已经到达了100%,而且这时网站也无法正常访问了。直到浮点运算结果出来后,才能正常加载。

这只是人手点击而已,如果用按键精灵的话,恐怕情况更糟糕!

我们再来做一个测试,首先保存以下代码为PHP文件:

<?php function test_float()
{
        //得到圆周率值
        $t = pi();
        $timeStart = gettimeofday();
        for($i = 0; $i < 3000000; $i++)
        {
                //开平方
                sqrt($t);
        }
        $timeEnd = gettimeofday();
        $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
        $time = round($time, 3)."秒";
        return $time;
}
if ($_GET['act'] == "float")
{
        $valFloat = test_float();
        echo($valFloat);
        exit();
}
else
{
        echo("Hello world");
} 
?>

我保存为float.php,那么我访问http://域名/float.php?act=float就会进行float运算。

接下来,我使用某个工具,对float.php?act=float进行连续30秒,每秒钟3000次的GET请求,看看效果如何!

GET Test

在进行GET请求后,系统平均负载立刻上升,到30/446后,完全定格住了,也就说已经无法正常对网站进行POST或者GET东西了。按F5刷新,网站长久未响应。而且此时,我的系统已经有明显的卡顿感。

连续的GET请求过去了一段时间,但是CPU占用还是保持100%不变,而且网站也仍然未响应,可以看出,CPU还有一大堆的浮点运算还没结束!由于我使用了varnish做前端,因此使用free -m看使用的内存,只有几百MB。

经过上面的测试,我们可以发现,这是一个效果非常明显的攻击,攻击者不需要太多肉鸡,也不需要大带宽,即可干死一台大内存的服务器!而且目前很多网站都是直接跑Apache的,那东西非常耗内存,加上高的CPU占用率,死的更快……

因此,各位站长们,为了你们的服务器的稳定,赶快把探针给撤掉吧……

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn