Command Benchmark
Hyperf 命令的基准测试组件,Fork 自 christophrumpel/artisan-benchmark。
安装
shell
composer require friendsofhyperf/command-benchmark介绍
Command Benchmark 组件为 Hyperf 命令提供了性能基准测试功能。它可以自动收集并显示命令执行的性能指标,包括:
- 执行时间:命令运行所需的时间
- 内存使用:命令执行期间使用的内存
- 数据库查询次数:命令执行期间执行的 SQL 查询数量
使用
该组件通过 AOP(面向切面编程)自动为所有 Hyperf 命令添加 --enable-benchmark 选项。
启用基准测试
在运行任何命令时,只需添加 --enable-benchmark 选项即可启用基准测试:
shell
php bin/hyperf.php your:command --enable-benchmark输出示例
命令执行完成后,会在输出末尾显示基准测试结果:
⚡ TIME: 2.5s MEM: 15.23MB SQL: 42各指标说明:
- TIME:执行时间(毫秒、秒或分钟)
- MEM:内存使用量(MB)
- SQL:执行的 SQL 查询次数
工作原理
该组件使用 Hyperf 的 AOP 功能拦截命令的构造和执行:
构造阶段:
- 记录开始时间和内存使用
- 注册数据库查询事件监听器
- 为命令添加
--enable-benchmark选项
执行阶段:
- 如果启用了
--enable-benchmark选项 - 计算执行时间、内存使用和查询次数
- 格式化并显示基准测试结果
- 如果启用了
结果显示:
- 使用彩色输出显示各项指标
- 自动格式化时间(毫秒、秒、分钟)
- 在命令输出末尾显示结果
配置
该组件无需额外配置,安装后即可使用。组件会自动注册到 Hyperf 容器中。
技术细节
AOP 切面
组件通过 CommandAspect 切面类拦截 Hyperf\Command\Command 类的以下方法:
__construct:初始化性能指标收集execute:执行完成后显示基准测试结果
性能指标
- 执行时间:使用
microtime(true)测量 - 内存使用:使用
memory_get_usage()测量 - 查询次数:通过监听
QueryExecuted事件统计
时间格式化
时间会根据执行时长自动选择合适的单位:
- 小于 1 秒:显示为毫秒(如
250ms) - 1 秒到 60 秒:显示为秒(如
2.5s) - 大于 60 秒:显示为分钟和秒(如
2m 30s)
示例
测试数据导入命令
shell
php bin/hyperf.php import:users --enable-benchmark输出:
Importing users...
100 users imported successfully.
⚡ TIME: 5.23s MEM: 28.45MB SQL: 150测试缓存清理命令
shell
php bin/hyperf.php cache:clear --enable-benchmark输出:
Cache cleared successfully.
⚡ TIME: 120ms MEM: 2.15MB SQL: 0注意事项
- 基准测试会带来轻微的性能开销,建议只在开发和调试时使用
- SQL 查询统计包括所有通过 Hyperf 数据库组件执行的查询
- 内存使用量是相对值,表示命令执行期间增加的内存使用量