Linux常用系统分析工具-CPU

TOP

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。TOP命令的可选参数和其对应的含义如下:

-c:显示完整的命令;
-d:屏幕刷新时间间隔;
-i<时间>:设置时间间隔;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。

img

注释:上图前5行是系统整体的统计信息。第一行是任务队列信息,第二行和第三行为进程和CPU的信息,最后两行为内存信息。下面对一些比较重要的参数进行说明。

Load average:0.01,0.02,0.05。load average表示系统在过去1分钟5分钟15分钟的任务队列的平均长度。这个值越大就表示系统CPU越繁忙。

%CPU(s):0.1us(用户空间占用的cpu百分百),0.1sy(系统空间占用的cpu百分比),0.0ni(用户进程空间内改变过优先级的用户占用的cpu百分比),90.9id(空闲cpu的百分比),0.0wa(等待输入输出cpu的百分比)。

Mem:1859880k buffers(用作内核缓存的内存量)。

Swap:磁盘交换区容量。

Strace

stace可以跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间。strace的蝉蛹选项以及选项对应的参数含义如下:

-c:统计每一个系统调用所执行的时间、次数和出错的次数等;
-f:跟踪由fork调用所产生的子进程;
-t:在输出中的每一行前加上时间信息;
-tt:在输出中的每一行前加上时间信息(微妙级);
-T:显示每一调用所耗的时间;
-e trace=set 只跟踪指定的系统调用。例如:-e trace=open、close、read、write表示只跟踪这四个系统调用、默认set=all;
-e trace=file 只跟踪有关文件操作的系统调用;
-e trace=process 只跟踪有关进程控制的系统调用;
-e trace=network 跟踪与网络有关的所有系统调用;
-e trace=signal 跟踪所有与系统信号有关的系统调用;
-e trace=ipc 跟踪所有与进程通讯有关的系统调用;
-o filename 将strace的输出写入文件filene -p pid 跟踪指定的进程pid。

例如执行 strace cat /dev/null,会得到如下输出:

img

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。如果你知道你要找的是什么,你可以让strace只跟踪一些类型的系统调用。例如你需要看看在loadconfigure脚本里面执行的程序里面系统调用ececve的调用情况,则只需要输入这样一条shell命令:

strace -f -o loadconfigure-strace.txt -e execve ./loadconfigure

再例如,我们知道MySQL的进程号是2255,则可以执行strace -p 2255-c来统计MySQL在某一段时间系统调用的统计情况。结果如下所示:

img

这里很清楚的告诉你调用了那些系统函数,调用次数多少,消耗了多少时间等等这些信息,这个对我们分析一个程序来说是非常有用的。

Perf

perf是Linux的性能调优工具。perf工具的常用命令包括top,record,report等。perf top命令用来显示程序运行的整体状况。该命令主要用来观察整个系统当前的状态,比如可以通过查看该命令的输出来查看当前系统最耗时的内核函数或某个用户进程。perf stat的运行效果如下:

img

img

perf record命令则用来记录指定事件在程序运行过程中的信息,而Perf report命令则用来报告基于前面record命令记录的事件信息生成的程序运行状况报告。我们通常用命令perf record -g -p pid将进程在命令运行期间的各项指令运行所占CPU的比例存在perf.data里面(-g表示记录函数之间的调用关系)。再用perf report –call-graph –stdio将刚刚的统计结果展示出来。perf record带-g选项时,perf report的运行效果:

img

perf record不带-g选项时,perf report的运行效果:

img

Vmstat

vmstat是一个很全面的性能分析工具,可以观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的 IO、中断、上下问切换、CPU使用等。

vmstat的输出如下:

img

procs:
-r:运行队列中进程数量、这个值也可以判断是否需要增加CPU(长期大于1);
-b:io处于阻塞装填的进程数。

memory:
-swap:使用虚拟内存大小;
-free:空闲物理内存大小;
-buff:用作缓冲的内存大小;
-cache:用作缓存的内存大小。

swap:
si:每秒从交换区写到内存的大小、由磁盘调入内存;
so:每秒写入交换区的内存大小、由内存调入磁盘。

io:
-bi:从块设备读入的数据总量(读磁盘)(KB/s);
-bo:写入到块设备的数据总量(写磁盘)(KB/s)。

system:
-in:每秒产生的中断次数;
-cs:每秒产生的上下文切换次数。

cpu:
-us:用户进程消耗的CPU时间百分比;
-sy:内核进程消耗的CPU时间百分比;
-wa:IO等待消耗的CPU时间百分比
-id:CPU处在空闲状态时间百分比。

推荐文章