getrusage

(PHP 4, PHP 5, PHP 7, PHP 8)

getrusage获取当前资源使用情况

描述

getrusage(int $mode = 0): array|false

这是 getrusage(2) 的接口。它获取系统调用返回的数据。

参数

mode

如果 mode 为 1,则 getrusage 将使用 RUSAGE_CHILDREN 调用。

返回值

返回一个关联数组,其中包含系统调用返回的数据。所有条目都可以通过使用其记录的字段名称访问。如果失败,则返回 false

变更日志

版本 描述
7.0.0 此函数现在在 Windows 上受支持。

示例

示例 #1 getrusage() 示例

<?php
$dat
= getrusage();
echo
$dat["ru_oublock"]; // 块输出操作次数
echo $dat["ru_inblock"]; // 块输入操作次数
echo $dat["ru_msgsnd"]; // 发送的 IPC 消息数量
echo $dat["ru_msgrcv"]; // 接收的 IPC 消息数量
echo $dat["ru_maxrss"]; // 最大驻留集大小
echo $dat["ru_ixrss"]; // 整数共享内存大小
echo $dat["ru_idrss"]; // 整数非共享数据大小
echo $dat["ru_minflt"]; // 页回收次数(软页面错误)
echo $dat["ru_majflt"]; // 页面错误次数(硬页面错误)
echo $dat["ru_nsignals"]; // 接收到的信号数量
echo $dat["ru_nvcsw"]; // 自愿上下文切换次数
echo $dat["ru_nivcsw"]; // 非自愿上下文切换次数
echo $dat["ru_nswap"]; // 交换次数
echo $dat["ru_utime.tv_usec"]; // 使用的用户时间(微秒)
echo $dat["ru_utime.tv_sec"]; // 使用的用户时间(秒)
echo $dat["ru_stime.tv_usec"]; // 使用的系统时间(微秒)
echo $dat["ru_stime.tv_sec"]; // 使用的系统时间(秒)
?>

备注

注意:

在 Windows 上,getrusage() 将只返回以下成员

  • "ru_stime.tv_sec"
  • "ru_stime.tv_usec"
  • "ru_utime.tv_sec"
  • "ru_utime.tv_usec"
  • "ru_majflt" (仅当 modeRUSAGE_SELF 时)
  • "ru_maxrss" (仅当 modeRUSAGE_SELF 时)

如果 getrusage() 使用 mode 设置为 1 (RUSAGE_CHILDREN) 调用,那么线程的资源使用情况将被收集(这意味着该函数在内部使用 RUSAGE_THREAD 调用)。

注意:

在 BeOS 2000 上,仅返回以下成员

  • "ru_stime.tv_sec"
  • "ru_stime.tv_usec"
  • "ru_utime.tv_sec"
  • "ru_utime.tv_usec"

参见

  • 您系统上关于 getrusage(2) 的手册页

添加备注

用户贡献备注 3 个备注

jlh at gmx dot ch
7 年前
请注意,此函数返回当前进程的 rusage。在您拥有长时间运行的 apache 进程来处理多个带有 PHP 执行的请求的 Web 环境中,这将返回累积计时,因此不适合用于说明您的用户时间使用了多少。您能做的最好的就是,在开始和结束时分别调用一次 getrusage(),并计算差值。
Domas Mituzas
16 年前
getrusage() 报告内核计数器,这些计数器只在应用程序失去上下文并切换到内核空间时更新。例如,在现代 Linux 服务器内核上,这意味着 getrusage() 调用将返回以 10 毫秒为单位四舍五入的信息,桌面内核将以 1 毫秒为单位四舍五入。

getrusage() 根本不适合微观测量 - getmicrotime(true) 可能更有价值。
To Top