5

背景

来新公司果酱文化任职CTO,看到代码性能差,设备成本非常高,于是着手改造,其中有个脚本,有个长期执行的脚本,老的做法,为每个用户创建一个PHP进程。一共300个人,创建了300个进程,进程间的频繁切换,导致内存占用极高,最近产品经理需要增加模拟用户数到几千人,老的进程方式已经无法满足需求,于是采用swoole协程去改造。用到框架ycroute(轻量级基于swoole协程的websocket框架):
https://github.com/caohao-php/ycsocket
下面列出改造前后的性能对比:

系统本身负载(4核8G机器)

关掉流量,并把 PHP-FPM 进程 和 Nginx 进程杀掉之后的一个负载
原内存=12.5%
系统占用内存=6.3% = 516M
image.png

原脚本多进程版本机器1负载(8核心 32G内存)

流量

image.png

CPU负载

image.png

内存负载

image.png
内存占用24%,去掉系统占用 6%之后(不太确定32G内存需要6%不),内存为 18% x (32G x 1024) = 5.9G 内存占用。

原脚本多进程版本机器2负载(8核心 16G内存)

流量

image.png

CPU负载

image.png

内存负载

image.png
内存占用38%,去掉系统占用 6%之后(不太确定16G内存需要6%不),内存为 32% x (16G x 1024) = 5.2G 内存占用。

swoole协程版机器负载(4核心 8G内存)

流量

image.png

CPU负载

image.png

内存负载

image.png
内存占用7.2%,去掉系统占用 6%之后,内存为 1.2% x (8G x 1024) = 98M 内存占用。

总结

在流量大增的情况下,4核8G的机器就可以搞定需求,而且系统负载更低。


smallhow
30 声望6 粉丝