自编教材分享:第三章—程序性能的分析和测量(二)



本期分享程序性能测量的工具:计算器类工具和跟踪类工具。
计算器类工具:
虚拟内存统计工具vmstat
Vmstat命令显示Linux系统虚拟内存状态,还可以统计关于进程 、内存、处理器使用率、I/O、对swap空间的I/O等系统整体运行状态。
使用方法
Vmstat命令常用格式及使用方法为:
Vmstat命令每隔interval秒采样一次,一共采样times次,如果省略了times,则vmstat命令会一直采集数据,直到用户手动停止,或使用ctrl+c进行停止。具体选项可以使用man vmstat命令来查看。
简单示例:
这个命令表示每隔2秒执行一次vmstat,一共执行10次。参数含义为,r:等待运行的进程数目;b:处在非中断睡眠状态的进程数;swpd:虚拟内存的使用情况;free:空闲的物理内存的大小;si:从磁盘交换到swap虚拟内存的交换页数量;so:从swap虚拟内存交换到磁盘的交换页数量;in:每秒的中断数;us:用户CPU使用时间。

输出字段一共分为6大部分:procs、memory、swap、io、system和cpu。如果r(等待运行的进程数目)经常大于4,id(空闲的CPU的时间)经常少于40,表示处理器的负荷很重。并且r的数目越多,表示处理器越繁忙。如果bi、bo长期不等于0,表示内存不足。

输入/输出统计工具iostat
Iostat命令是对系统的磁盘操作活动进行监视的一个工具。它的特点是汇报磁盘活动统计情况,同时也会汇报处理器使用情况。
使用方法
Iostat命令常用格式及使用方法为:
Options 表示操作项参数,interval指定统计时间间隔,count表示总共输出次数,具体的参数可以使用iostat -help来查看,参数的意义可以使用man iostat来查看。
简单示例:
-d 2 3表示每隔2秒,显示一次设备统计信息,总共输出3次。参数含义为,Device:设备名称;tps:每秒I/O数,即IOPS,磁盘连续读和连续写之和;kB_read/s:每秒从磁盘读取数据大小,单位为KB/s;kB_wrtn/s:每秒写入磁盘的数据的大小,单位为KB/s;kB_read:从磁盘读出的数据总数,单位为KB;kB_wrtn:写入磁盘的的数据总数,单位为KB。

实时状态工具top
Top命令显示系统当前的进程以及其它的一些信息,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。Top命令提供了对系统处理器的实时状态监视,它将显示系统中使用处理器最密集的任务列表。该命令可以按内存使用和执行时间对任务进行排序。
使用方法
Top命令常用格式及使用方法为:
Top命令显示了系统平均负载、任务信息、处理器状态、内存信息、进程或任务的状态。Top命令输出中的第一行是系统的平均负载、系统当前时间、系统已运行时间、当前连接系统的终端数、系统负载;第二行是总进程数、正在运行的进程数、正在睡眠的进程数、停止的进程数、僵死状态的进程数;第三行是用户进程运行、内核、用户调整优先级、空闲率;第四行是物理内存总量、空闲内存总量、使用的物理内存总量、用作内核缓冲/缓存的内存量;第五行可用于进程下一次分配的物理内存数量、PR内核优先级、NI用户视角下的进程执行优先级、虚拟内存大小,进程使用的未被换出的物理内存大小、进程使用的共享内存大小,进程当前的状态等。

当前进程信息统计工具ps
Ps命令是最简易操作又非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行以及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。
使用方法
Ps命令常用格式及使用方法为:
Ps命令最常用的选项就是e、f、a、u。相应的选项组合为ps -aux,ps -ef等,可以通过这些组合准确定位系统进程状态。
简单示例:

跟踪类工具
程序调试工具gdb
gdb是GNU开源组织发布的一款功能强大的UNIX/Linux下的程序调试工具,主要功能就是监控程序的执行。gdb的主要功能就是监控程序的执行。当源程序文件编译为可执行文件并执行时,并且该文件中必须包含必要的调试信息,gdb才会派上用场。所以在编译时需要使用-g选项编译源文件,才可生成满足gdb要求的可执行文件。
一般来说,gdb主要完成以下四个方面的功能:
启动程序,可以按照自定义的要求随心所欲的运行程序。
可让被调试的程序在所设置的指定断点处停住。
当程序被停住时,可以检查此时程序中所发生的事件。
动态的改变程序的执行环境。
使用方法
简单示例:

b3表示调试的代码第三行设置为断点,r或run表示执行程序,whatis iNum表示查看iNum的数据类型,c表示继续执行程序,-n一步步执行程序,其中p iNum表示输出变量iNum的值。
堆栈统计信息工具pstack
pstack工具可对指定进程号的进程输出函数调用栈,对于排查进程问题时非常有用。比如发现一个服务一直处于工作状态,如假死状态,使用这个命令就能轻松定位问题所在。
使用方法
Pstack命令常用格式及使用方法为:
Pstack命令可以和ps命令一起使用,首先使用ps命令来查看要检查程序的进程号pid。再使用pstack工具加上进程号打印出它的堆栈信息,查看线程的详细函数栈信息。它的函数是从下到上的调用关系。

跟踪系统调用工具strace
Strace是一种相当有效的跟踪工具,它的主要特点是可以用来监视系统调用。
Strace工具有两种运行模式:
通过它启动要跟踪的进程。用法很简单,在原本的命令前加上strace即可。例如,要跟踪“ls -al”这个命令的执行,只需要输入指令strace ls -al即可。
另外一种运行模式是跟踪已经在运行的进程,在不中断进程执行的情况下,了解程序的运行过程。此时,只需要给strace传递一个-p pid选项即可。
需要跟踪程序add.out的运行过程,则输入命令
了解正在运行的进程号为2403的进程情况,只需要输入命令
