写点什么

一个简单实用的 Linux 性能分析工具

发布于: 2021 年 03 月 05 日
一个简单实用的Linux性能分析工具


​在 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


发布于: 2021 年 03 月 05 日阅读数: 26
用户头像

有一点想法的电脑维修工 2020.07.14 加入

一位有些想法的技术爱好者

评论

发布
暂无评论
一个简单实用的Linux性能分析工具