压力测试
最后更新于:2022-04-02 06:25:24
# 压力测试
[TOC]
## 注意事项
> 不同的硬件平台和软件环境,测试出的实际数据并不相同,因此仅建议进行基准测试,在相同的环境下测试不同软件系统之间的性能差距
* 编译`Swoole`必须关闭`debug`,使用`gcc -O2`或更高优化级别
* 关闭屏幕输出,否则打印屏幕的`echo`操作会使服务器阻塞
* 在多核的机器上开启合适的进程数量,进程数量不足将无法发挥全部硬件计算能力
* 检查程序中是否存在`PHP`错误,`PHP`错误处理会使服务器的处理能力大幅下降
## 优化选项
* 使用`SWOOLE_BASE`模式,可以减少`2`次`IPC`开销,提升性能
* 启用端口复用,可大幅提高短连接服务的性能,需要`Linux-3.10`或更高版本内核
* `Http`服务器请关闭`gzip`压缩,可节省服务器`CPU`的开销
* `Http`服务器请使用`KeepAlive`长连接测试,避免短连接的`IO`开销降低性能差异比例
* 移除没有实际逻辑的回调设置,如程序中并未使用`onConnect`和`onClose`回调,在代码中不要设置这`2`项回调
~~~
Swoole\Async::set(array('enable_reuse_port' => true));
$serv = new Swoole\Server("0.0.0.0", 9502, SWOOLE_BASE);
$serv->set(array(
'worker_num' => 8,
));
$serv->on('Receive', function (swoole_server $serv, $fd, $from_id, $data)
{
$serv->send($fd, "Swoole: " . $data);
});
$serv->start();
~~~
## 其他提示
* 使用`ab`测试工具时,请开启`-k`长连接
* `ab`测试工具不支持`Http-Chunk`,在`Http\Server`中请勿使用`response->write`
';