Linux time命令用法(time指令)(计算程序执行时间、运行时间)/usr/bin/time、real(实际时间)、user(用户CPU时间)、sys(系统CPU时间)挂钟时间

Linux time 命令用法详解

Linux time命令是一个非常实用的工具,主要用于计算程序执行的时间。这个命令可以用来度量一段代码或者脚本的运行时间,有助于性能调优和基准测试。

注意:对于time命令,实际上有两个版本。一个是shell的内建(builtin)命令,另一个是/bin或/usr/bin下的独立可执行程序。本文将以$(which time)对应的time讲解time命令用法

在许多shell中(例如bash和dash),time是一个内建命令,它只支持-p选项。在这些shell中执行time命令时,即使你安装了独立的/usr/bin/time程序,也会优先使用内建命令。

另一方面,/usr/bin/time/bin/time是一个独立的可执行程序,它提供了更多的功能和选项,包括-v选项。

如果想使用-v选项,需要确保调用的是独立的time程序。可以通过指定完整的路径来调用它,例如:

/usr/bin/time -v ls

或者,如果不确定time程序的具体位置,也可以使用which命令来查找:

$(which time) -v ls

如果发现系统中没有/usr/bin/time/bin/time,可能是因为没有安装。在Ubuntu或Debian系的系统中,可通过下面的命令进行安装:

sudo apt-get install time

1. 基本语法

time [options] command [arguments...]

这里,options表示命令选项,command表示要执行的命令,arguments表示命令参数。

在这里插入图片描述

2. 常见选项

  • -p:以可移植输出格式打印实际时间、用户 CPU 时间和系统 CPU 时间。
  • -v:提供更详细的信息,包括进程使用的系统资源。

3. 输出解析

time命令通常会输出三种时间:

real(实际时间)

从开始到结束的墙钟时间(wall-clock time)。也就是我们常说的实际时间。

user(用户CPU时间)

在用户模式中执行该过程所花费的CPU时间。

sys(系统CPU时间)

在内核模式中执行该过程所花费的CPU时间。

4. 使用示例

下面通过几个例子来展示time命令的使用。

4.1 测量简单命令的运行时间

$(which time) ls

这条命令将测量ls命令的运行时间。

在这里插入图片描述

4.2 使用 -p 选项

$(which time) -p ls

使用 -p 选项,可以使输出更具可移植性。

在这里插入图片描述

注意结果单位为秒。

为什么说time -p参数使输出更具有可移植性?

-p参数在time命令中,是用来输出可移植格式的时间信息。这种格式相对简单,不依赖于特定的区域设置或者语言环境。

在没有使用-p参数时,time命令的输出格式可能会受到操作系统、Shell版本或者地区设置的影响。例如,在某些系统上,默认的输出格式可能包括毫秒级别的精度,而在其他系统上,则只有秒级别的精度。或者在一些非英文的环境下,“real”、"user"和"sys"可能会被翻译成其他语言。

但当使用了-p参数后,无论在何种环境下,time命令都会以固定的格式来输出结果:每种时间信息占一行,时间类型和具体数值之间由一个空格分隔,时间数值保留到小数点后两位。这种格式简洁明了,不会受到任何外部因素的干扰,更适合在脚本中进行解析或者在不同系统之间进行比较。

4.3 使用 -v 选项

$(which time) -v ls

使用 -v 选项,可以获得关于进程使用的系统资源的详细信息。

在这里插入图片描述

-v选项结果解读
  • Command being timed: 被测量时间的命令
  • User time (seconds): 在用户模式中运行所消耗的CPU时间(单位:秒)
  • System time (seconds): 在内核模式中运行所消耗的CPU时间(单位:秒)
  • Percent of CPU this job got: 这个任务获得的CPU时间百分比
  • Elapsed (wall clock) time: 实际过去的时间,也被称为挂钟时间(格式:小时:分钟:秒 或 分钟:秒)
  • Average shared text size: 平均共享文本区域大小(单位:KB)
  • Average unshared data size: 平均非共享数据区域大小(单位:KB)
  • Average stack size: 平均栈大小(单位:KB)
  • Average total size: 平均总大小(单位:KB)
  • Maximum resident set size: 最大常驻集大小,即进程在内存中占用的最大物理内存空间(单位:KB)
  • Major (requiring I/O) page faults: 需要进行I/O操作的主要缺页次数
  • Minor (reclaiming a frame) page faults: 不需要进行I/O操作的次要缺页次数
  • Voluntary context switches: 自愿上下文切换的次数
  • Involuntary context switches: 非自愿上下文切换的次数
  • Swaps: 交换次数
  • File system inputs: 文件系统输入操作的数量
  • File system outputs: 文件系统输出操作的数量
  • Socket messages sent: 发送的套接字消息数量
  • Socket messages received: 接收的套接字消息数量
  • Signals delivered: 交付的信号数量
  • Page size (bytes): 页面大小(单位:字节)
  • Exit status: 命令退出状态,0通常表示成功执行

5. 疑难解析:区分real、user和sys时间

  • real:此时间是指从命令开始执行到结束的总体时间,包括其他进程占用的CPU时间和该进程在等待I/O或者执行某些操作时所经过的时间。
  • user:此时间是指CPU在执行用户模式代码所花费的时间。这包括执行调用库函数(不涉及系统调用)的时间。
  • sys:此时间是指CPU在执行内核模式代码所花费的时间。这通常涉及到一些系统调用,例如进行文件或网络I/O的调用。

注意,如果在多核处理器上运行程序,用户和系统时间可能超过实际时间。因为多个CPU核心可以同时工作,可能会累积更多的CPU时间。

6. 结论

time命令是一个强大的工具,它可以帮助开发人员测量和优化代码性能。通过了解其基本用法和输出,可以更好地理解程序的执行情况,为性能优化提供依据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值