在linux中,我们通常用time命令来计算某个程序或某个命令、脚本的运行耗时,比如我需要查看ps命令执行时间
通常会在命令执行结束后,输出统计结果,统计结果中有三个统计时间,分别是real、user、sys,详细解释如下:
- real:从进程 ps 开始执行到完成所耗费的 CPU 总时间。该时间包括 ps 进程执行时实际使用的 CPU 时间,ps 进程耗费在阻塞上的时间(如等待完成 I/O 操作)和其他进程所耗费的时间(Linux 是多进程系统,ps 在执行过程中,可能会有别的进程抢占 CPU)。
- user:进程 ps 执行用户态代码所耗费的 CPU 时间。该时间仅指 ps 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
- sys:进程 ps 在内核态运行所耗费的 CPU 时间,即执行内核系统调用所耗费的 CPU 时间。
今天要说的这个time命令有点不一样,它不是一个内置的命令工具,我们上面用的time是一个bash的内置shell关键字
而我们今天要说的这个time命令是一个强大的性能分析工具,安装方法很简单,直接通过yum安装即可
安装完成后即可使用
和time一样,也是在最后显示统计信息,比time统计的信息要全面,但是输出的格式不太友好,在time命令后添加-v选项
显示更详细的内容,包括执行时间、CPU占用、内存占用、IO等,详细的输出指标介绍如下:
- Elapsed (wall clock) time 执行命令所花费的时间,格式是:[hour]:minute:second
- System time 命令执行时在内核模式所花费的时间,单位是秒
- User time 命令执行时在使用者模式所花费的时间,单位是秒
- Percent of CPU this job got 命令执行时 CPU 的占用比例。
其实这个数字就是内核模式的 CPU 时间加上使用者模式的 CPU 时间除以总时间
- Maximum resident set size 执行程序所占用内存的最大值。单位是 KB
- Average resident set size 执行程序所占用内存的平均值,单位是 KB
- Average total size 执行程序所占用的内存总量(stack+data+text)的平均大小, 单位是 KB
- Average unshared data size 执行程序所占用的私有数据区(unshared data area)的平均 大小,单位是 KB
- Average stack size 执行程序所占用的私有堆栈(unshared stack)的平均大小, 单位是 KB
- Average shared text size 执行程序间共享内容(shared text)的平均值,单位是 KB
- Page size 系统内存页的大小,单位是 byte。对于同一个系统来说,这 是个常数
- Major (requiring I/O) page faults 此程序的主要内存页错误发生的次数。
所谓的主要内存页错误是指某一内存页己经詈换到 SWAP 分区中,又被其他程序使用过,该页的内容必须从 SWAP 分区里再读出来才能使用
- Minor (reclaiming a frame) page faults 此程序的次要内存页错误发生的次数。
所谓的次要内存页错误是指某一内存页虽然己经詈换到 SWAP 中,但尚未被其他程序使用。此时该页的内容并未 被破坏,不必从 SWAP 分区里读出来即可直接使用
- Swaps 此程序被交换到 SWAP 分区的次数
- Involuntary context switches 此程序被强迫中断(如 CPU 时间耗尽)的次数
- Voluntary context switches 此程序自愿中断(I/O 执行完毕,磁碟读取完成等)的次数
- File system inputs 此程序所输入的文件数
- File system outputs 此程序所输出的文件数
- Socket messages received 此程序所收到的 Socket Message
- Socket messages sent 此程序所送出的 Socket Message
- Signals delivered 此程序所收到的信号数
- Exit status 命令退出状态
通过time命令的输出,可以很直观的查看到应用、脚本或命令的性能问题是出现在什么地方
使用该time命令,可以通过命令前加'\',或者指定目录/usr/bin/time来执行,否则使用的是bash中的time