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

方法/步骤

我们先看下环境,这个网站是LAMP架构,PHP版本是5.2.17。

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

PHP未打补丁前,服务器CPU情况,目前是2.1%的使用率。

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

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

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

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

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

<?php $size = pow(2, 16); $data = ''; for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) { $data .= $key.'=&'; } $url = ';; $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碰撞。[[email protected] htdocs]# /usr/local/php/bin/php hash.php

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

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

Cpu到了100%,网站是什么情况呢。我们再浏览该台web服务器,点网站上面的链接,反应正常,估计是这台web服务器本身没有一点压力,所以看不出来。把并发量调到10000,再测下,刚才是100并发。

刷新checktime.php页面,可以很快显示,网站正常。但此时web服务器cpu已是100%

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

结论,我是用个人博客作目标机,因为个人博客,目前只有几个人访问,没有压力,所以即使,通过10000并发的Hash,CPU上到100%,个人博客打开的速度,还是相当快。

打上补丁,我们再观察一下。1、先查下以后在搭建环境时,PHP的编译参数

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

2、到网上去下载一个PHP补丁,下载地址为:https://github.com/laruence/laruence.github.com/tree/master/php-5.2-max-input-vars

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

3、根据个人平台的版本号,点击进去,注意,不要在它上面点右键,另存为,否则你down下的是一个html文件,文件名倒是php-5.2.17-max-input-vars.patch。在新弹出的页面点“raw”,就会打开这个补丁文件。

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

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

把里面的内容复制,我这里只截了它一小部分。然后在web服务器上新建一个文件,php-5.2.17-max-input-vars.patch,里面就是刚复制的。

4、进php的原始安装目录,我这里环境是/opt/soft/php-5.2.17。先把原来已编译好的一些,清理一下。

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

5、打补丁并重新编译一下php

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

再config再make ZEND_EXTRA_LIBS='-liconv' //有的平台是make,每个环境不一样再make install

6、重启一下apache,看效果[[email protected] php-5.2.17]# pkill httpd[[email protected] php-5.2.17]#/usr/local/apache/bin/apachectl start

访问一下,web服务器的phpinfo.php,查看PHP环境有没有变化。大家可以在最上面看到,PHP版本后带了个P1。这个还不够,我们再用Hash碰撞一下,看cpu会不会上100%。

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

在测试机上,还是取并发10000,去Hash web服务器。发现web服务器的CPU一直保持在0.5%。

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

问题解决!

相关文章

  1. 彻底地解决CPU资源占用过高的问题

    机器假死.鼠标有如木偶一样缓慢挪动,想调出任务管理器查看究竟,居然半天才弹出显示,而且状态栏里的CPU使用率高达100%.碰到这种情况,一般初学者都会选择重装系统来解决,然而其方法效果很好,但是它存在很多缺陷,如重装系统后,原来的系统设置必须重新设置,常用软件也得重新安装,非常麻烦.其实我们完全可以 ...

  2. MySQL CPU占用过高怎么办?

    简单的分为下面几个步骤来解决这个问题:1.mysql运行正常,也有可能是同步设置问题导致2.如果mysql运行正常,那就是php的一些sql语句导致问题发现,用root用户进入mysql管理 mysql -u root -p输入密码 mysql:show processlist; 语句,查找负荷最重 ...

  3. 玩游戏电脑cpu占用100%解决办法

    CPU又称中央处理器,是一台计算机的控制中心,有时候使用笔记本玩游戏的时候可能会出现CPU占用100%的现象产生,下面小编为大家分享下碰到此种情况的解决办法,希望对大家有所帮助. 方法/步骤 在玩游戏的时候如果是笔记本尽量使用外接电脑玩游戏,不要使用电池玩游戏,当使用电脑供电的时候,笔记本处于降频状 ...

  4. CPU占用高电脑很卡怎么办?

    很多朋友在使用电脑都出现过电脑CPU使用率高导致电脑非常卡,运行的一些程序卡主不动了.无响应的情况.那么电脑CPU占用100%使用率怎么解决呢?导致CPU使用率高的问题无非就在于两点:1.系统或软件问题:2.硬件问题 工具/原料 电脑 CPU占用率高的原因 一些杀毒软件会对网页.进程.插件.邮件监控 ...

  5. 笔记本电脑CPU使用率100%的原因与解决

    工具/原料 系统盘 驱动盘 打开网页太多浏览器出错 这是最常见的情况,打开过多的flash网页.网络电视页面会占用大量 CPU 资源,如果打开的页面有错误代码,也可能直接导致IE浏览器崩溃,出现CPU 100%运行,甚至死机.建议大家尽量关闭已经不再使用的网页,不要同时打开太多flash网页:如果I ...

  6. 解决JavaMySQL性能问题的思路

    千万别在论坛.群里问,我的机器好慢怎么回事?我的机器内存泄露了怎么回事? 这类大而空的问题一点意义都没有,其实谁都不知道.你要做的是用下面的思路.方法.工具去定位它 解决问题思路 Java程序问题(运行慢) 先通过top查看整个CPU资源使用情况; 通过top-Hppid查看java进程的每一个线程 ...

  7. PHP5.5给我们带来了什么?

    PHP 5.4 在四个月前发布了,现在来看PHP下一个版本似乎早了点,但我还是想给大家透露一些PHP5.5 将会带哪些新特征.注意一点:PHP5.5 还在早期的开发阶段,所以没有人知道最终的结果是什么样的.所有我在这里谈论的都只是提案.也就是说,不是所有下面列出的新特征都会加入PHP5.5. 所以, ...

  8. PHP 5.5 将会带来哪些新特征?

    PHP 5.4是 在四个月前发布的,现在来看PHP下一个版本似乎早了点,但笔者还是想给大家透露一下PHP5.5 将会带来哪些新特征.注意一点:PHP5.5 还在早期的开发阶段,所以没有人知道最终的结果是什么样的.所有笔者在这里谈论的也都只是提案.就是说,不是所有下面列出的新特征都一定会加入PHP5. ...

  9. CPU使用率100%怎么解决?(2)

    CPU占用100%案例分析 1.dllhost进程造成CPU使用率占用100% 特征:服务器正常CPU消耗应该在75%以下,而且CPU消耗应该是上下起伏的,出现这种问题的服务器,CPU会突然一直处100%的水平,而且不会下降.查看任务管理器,可以发现是DLLHOST.EXE消耗了所有的CPU空闲时间 ...