如何监控 PHP 应用的内存使用
监控您 PHP 应用的 RAM 使用情况可能很有用,尤其是如果您注意到运行算法时内存消耗过高。
您正在生产服务器上运行一个 Symfony 应用程序,突然在您漂亮的 Grafana 仪表板上注意到内存使用量激增。
您已确定问题的原因,并且能够在本地开发服务器上复现它。
现在你想要知道你的脚本执行过程中消耗了多少内存:PHP 有内置函数可以做到这一点!
让我们看看 memory_get_usage()
和 memory_get_peak_usage()
。
memory_get_usage
此函数的实现如下:
memory_get_usage(bool $real_usage = false): int
real_usage
参数可以用来获取不同的值:
true
将返回由 Zend 引擎内存管理器使用的内存,因此是 PHP 进程实际使用的内存。false
将返回运行脚本所使用的内存。
如果您想知道一个函数调用使用了多少内存,使用实际使用量是没有用的,但对于基准测试来说很有用!
memory_get_peak_usage()
此函数具有与 memory_get_usage
相同的参数 real_usage
。
返回值将是执行所需的最高内存。
每个函数的使用场景是什么?
这是一个高内存消耗算法的示例
<?php
$array = [];
for ($i = 1; $i < 10000; $i++) {
$array[] = substr(sha1((string) $i), 0, 15);
if ($i % 1000 === 0) {
echo 'Usage: ' . memory_get_usage() / 1024 / 1024 . ' MBs' . PHP_EOL;
}
}
echo 'Peak usage: ' . memory_get_peak_usage() / 1024 / 1024 . ' MBs';
生成随机字符串并将它们推入数组——PHP 8.1 这是此脚本的输出(PHP 8.1):
Usage: 0.44483184814453 MBs
Usage: 0.51425933837891 MBs
Usage: 0.61490631103516 MBs
Usage: 0.65305328369141 MBs
Usage: 0.81620025634766 MBs
Usage: 0.85434722900391 MBs
Usage: 0.89249420166016 MBs
Usage: 0.93064117431641 MBs
Usage: 1.2187881469727 MBs
Peak usage: 1.2569732666016 MBs
现在您已经知道如何使用这些函数,您可以在任何时间调试您的应用程序并查看其内存消耗!