time的,用于检测的运行时间,还可以检测显存、I/O等的使用情况。
1linux系统默认有两个time
1一个是bash的外置命令,比较简单
2一个是/usr/bin/time外部命令。
root@SD-20200928IIIF:~# type -a time
time is a keyword
time is /usr/bin/time
2外置的time命令
查看运行时间:
root@SD-20200928IIIF:~# time php demo.php
10000
real 0m0.122s
user 0m0.016s
sys 0m0.109s
查看shell运行时间:
root@SD-20200928IIIF:~# time find /etc/php/ -name "php.ini"
/etc/php/7.2/apache2/php.ini
/etc/php/7.2/cli/php.ini
real 0m0.016s
user 0m0.000s
sys 0m0.016s
输出结果统计了三个时间:
real:从进程开始执行到完成所花费的CPU总时间。该时间包括进程执行时实际使用的CPU时间,进程花费在阻塞上的时间(如等待完成I/O操作)和其他进程所花费的时间(Linux是多进程系统,ls在执行过程中,可能会有别的进程占据CPU)。
user:进程执行用户态代码所花费的CPU时间。该时间仅指进程执行时实际使用的CPU时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
sys:进程在内核态运行所花费的CPU时间,即执行内核系统调用所花费的CPU时间。
真正执行时间是多少?答案就是user+sys的时间,但通常情况下,real=user+sys,因此我们就使用real的时间作为程序的执行时间了。
2.1real的几个坑
误区一:real_time=user_time+sys_time
realtime是包含了其他进程的执行时间和进程阻塞时间的,而usrtime+systime其实是不包括其他进程的执行时间和进程阻塞时间的。为此,real_time>user_time+sys_time是十分有可能的。
误区二:real_time>user_time+sys_time
通常来说,在单核CPU系统中,这个关系式是创立的,但假如我们的系统是多核CPU的话,而有些程序是就能同时借助到多核CPU的估算能力的,在这些情况下这个关系式就不组建了。
程序借助多核CPU的估算能力,可以并行地处理多项事务。如同一件工作linux操作系统界面,原先是一个CPU核去做,如今是两个CPU核并行做免费linux主机,这么完成同样工作所耗费的总时间是user_time+sys_time,而两个人并行做却还能在更短的时间内完成,历时为real_time。为此,这些情况下,便出现了real_time
误区三:real_time
多核情况下,real_timeuser_time+sys_time。
里面的三个误区有点绕,但推论很重要,就是real_time和user_time+sys_time的大小关系不是恒久不变的,你须要了解你的Linux服务器,是单核,还是多核,这样就能正确地确定它们的关系。
2.2系统缓存
root@SD-20200928IIIF:~# time find /mnt/d/php_worker/php-command/ -name "*php" > /dev/null
real 0m0.025s
user 0m0.000s
sys 0m0.031s
root@SD-20200928IIIF:~# time find /mnt/d/php_worker/php-command/ -name "*php" > /dev/null
real 0m0.021s
user 0m0.016s
sys 0m0.000s
为何同样的命令在第二次执行时快如此多呢?
这个现象跟Linux操作系统的运行原理有关,find命令在第一次执行后,系统会对一些文件做缓存,在第二次执行时,就刚好使用到了这种缓存中的数据,因而执行速率就变快了好多。
3/usr/bin/time命令
它除了可以检测运行时间,还可以检测显存、I/O等的使用情况
这儿还用php这个举例
# shell内置time命令
root@SD-20200928IIIF:~# time php demo.php
10000
real 0m0.095s
user 0m0.031s
sys 0m0.063s
# /usr/bin/time 命令
root@SD-20200928IIIF:~# /usr/bin/time php demo.php
10000
0.04user 0.07system 0:00.11elapsed 107%CPU (0avgtext+0avgdata 16476maxresident)k
0inputs+0outputs (0major+4801minor)pagefaults 0swaps
# /usr/bin/time 命令也可以使用 time
root@SD-20200928IIIF:~# time php demo.php
10000
0.03user 0.06system 0:00.09elapsed 96%CPU (0avgtext+0avgdata 16476maxresident)k
0inputs+0outputs (0major+4801minor)pagefaults 0swaps
/usr/bin/time命令输出内容中的最后两行,复印了好多指标数据linux系统查看当前时间的命令,但其实有点冗长难懂。这时我们可以使用一个-v选项,这样可以复印出更详尽的低格后的信息。
root@SD-20200928IIIF:~# time -v php demo.php
10000
Command being timed: "php demo.php"
User time (seconds): 0.00
System time (seconds): 0.10
Percent of CPU this job got: 93%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.11
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 16476
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 4802
Voluntary context switches: 0
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
在time命令的输出中,Elapsedtime是通过系统调用gettimeofday获取到的结束时间和起始时间相加得到的。为此,time对于运行时间较短的任务计时时,会形成一定偏差。time命令输出的时间统计精度基本在10微秒级。
3.1time命令输出指标介绍
time命令可以显示的资源共有三大项,分别是:时间、内存和I/O。下边来具体瞧瞧time命令都显示了什么指标数据。
(1)时间
指标
含义
Elapsed(wallclock)time
执行命令所耗费的时间,格式是:[hour]:minute:second
Systemtime
命令执行时在内核模式所耗费的时间,单位是秒
Usertime
命令执行时在使用者模式所耗费的时间,单位是秒
PercentofCPUthisjobgot
命令执行时CPU的占用比列。虽然这个数字就是内核模式的CPU时间加上使用者模式的CPU时间乘以总时间
(2)显存
指标
含义
Maximumresidentsetsize
执行程序所占用显存的最大值。单位是KB
Averageresidentsetsize
执行程序所占用显存的平均值,单位是KB
Averagetotalsize
执行程序所占用的显存总数(stack+data+text)的平均大小,单位是KB
Averageunshareddatasize
执行程序所占用的私有数据区(unshareddataarea)的平均大小,单位是KB
Averagestacksize
执行程序所占用的私有堆栈(unsharedstack)的平均大小,单位是KB
Averagesharedtextsize
执行程序间共享内容(sharedtext)的平均值,单位是KB
Pagesize
系统显存页的大小,单位是byte。对于同一个系统来说,这是个常数
(3)I/O
指标
含义
Major(requiringI/O)pagefaults
此程序的主要显存页错误发生的次数。所谓的主要显存页错误是指某一显存页己经詈换到SWAP分区中,又被其他程序使用过,该页的内容必须从SWAP分区里再读下来能够使用
Minor(reclaimingaframe)pagefaults
此程序的次要显存页错误发生的次数。所谓的次要显存页错误是指某一显存页其实己经詈换到SWAP中,但仍未被其他程序使用。此时该页的内容并未被破坏linux系统查看当前时间的命令,何必从SWAP分区里读下来即可直接使用
Swaps
此程序被交换到SWAP分区的次数
Involuntarycontextswitches
此程序被逼迫中断(如CPU时间用尽)的次数
Voluntarycontextswitches
此程序自愿中断(I/O执行完毕,硬碟读取完成等)的次数
Filesysteminputs
此程序所输入的文件数
Filesystemoutputs
此程序所输出的文件数
Socketmessagesreceived
此程序所收到的SocketMessage
Socketmessagessent
此程序所送出的SocketMessage
Signalsdelivered
此程序所收到的讯号数
Exitstatus
命令退出状态
本文整理参考
本文原创地址://gulass.cn/tmlzlxtzdyyc.html编辑:刘遄,审核员:暂无