请注意,此函数返回当前进程的 rusage。在您拥有长时间运行的 Apache 进程以使用 PHP 执行来服务多个请求的 Web 环境中,这将返回累积计时,因此不适合用于告知使用了多少用户时间。您可以做的最好的事情是在开始时和结束时分别调用 getrusage() 并计算差值。
(PHP 4, PHP 5, PHP 7, PHP 8)
getrusage — 获取当前资源使用情况
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"
(仅当mode
为RUSAGE_SELF
时)"ru_maxrss"
(仅当mode
为RUSAGE_SELF
时)如果 getrusage() 使用设置为
1
(RUSAGE_CHILDREN
)的mode
调用,则会收集线程的资源使用情况(这意味着内部使用RUSAGE_THREAD
调用该函数)。
注意:
在 BeOS 2000 上,仅返回以下成员
"ru_stime.tv_sec"
"ru_stime.tv_usec"
"ru_utime.tv_sec"
"ru_utime.tv_usec"
请注意,此函数返回当前进程的 rusage。在您拥有长时间运行的 Apache 进程以使用 PHP 执行来服务多个请求的 Web 环境中,这将返回累积计时,因此不适合用于告知使用了多少用户时间。您可以做的最好的事情是在开始时和结束时分别调用 getrusage() 并计算差值。
getrusage() 报告内核计数器,这些计数器仅在应用程序丢失上下文并切换到内核空间时更新。例如,在现代 Linux 服务器内核上,这意味着 getrusage() 调用将返回四舍五入到 10 毫秒的信息,桌面内核则为 1 毫秒。
getrusage() 完全不适用于微观测量 - 并且 getmicrotime(true) 可能是更有价值的资源。