提升服务器应对高并发之路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wanghao725/article/details/75040029

公司运营的公众号,粉丝有350W以上。微信推送时,开始的半小时,访问量从0一下到达峰值。最高同时在线人数1w以上,因为用户的主要数据操作都在进入瞬间,预估最高并发的话,应该在1w以上,导致页面出现大量502。业务逻辑中,包含读写数据库及curl调用外部接口。
现有服务器配置:
阿里云ECS 16核+16G
nginx : 1.2.7
php : 5.3.17
数据库:阿里云RDS,主从服务器,随时扩展

数据库配置了主从,并且可随时扩展,现在就主要测试nginx和php的抗并发能力了。因为内网没有其他服务器了,故用本机进行压力测试。
1、测试一张静态图片的并发情况:

静态图并发明细

2、测试一个静态HTML页面并发情况:

静态HTML并发情况

由上面两组测试可知,静态图后台静态HTML的QPS基本一致,都在一万以上,nginx是可以撑得住当前并发量的

3、测试一个php页面的并发情况:

测试代码:
$i =   0;
for($i;$i<10000;$i++){
    $n	=	$i*($i+1);
}
echo $n;

PHP页面并发情况

从测试结果看,QPS减少了1/2还要多,而此时php-fpm的进程数并没有用到max_children的数量。
修改测试的php文件内容,改为:

echo 'HELLO WORLD';
exit;

再次测试,QPS在1w左右,性能损耗较少,经过上面测试可知,php-fpm的处理能力与页面的处理逻辑相关。
经过测试,php-fpm一个进程的处理速度还是很快的,即使并发1w,进程最多开到400个,实际应用中,逻辑复杂些的话,max_children设置为2000应该也够用了。那可能存在的问题就是,curl的接口,遇到高并发阻塞了,导致没有进程处理新的访客,所以频繁出现 502错误。
解决方法,设置CURL的超时时间,超时之后,结束进程,以供新的访客使用。

猜你喜欢

转载自blog.csdn.net/wanghao725/article/details/75040029