在单用户多任务的操作系统中,或者多用户多任务的操作系统中,系统同时运行多个程序,这些程序的并行运行势必形成对系统资源的竞争使用。因此,操作系统必须能够处理和管理这种并行运行的程序,使之对资源的使用按照良性的顺序进行
进程是一个程序关于某个数据集的一次运行。进程是程序的一次运行活动,是一个动态的概念,而程序是静态的概念,是指令的集合。进程具有动态性和并发性,程序是进程运行所对应的运行代码,一个进程对应于一个程序,一个程序可以同时对应于多个进程。一个进程从创建而产生至撤销而消亡的整个生命周期,可以用一组状态加以刻画。为了便于管理进程,把进程划分为几种状态,分别有三态模型和五态模型。
当处理器不能即时处理进程时,就会出现进程排队的现象,如果出现持续排队的现象就说明CPU当前处于繁忙状态,所以分析CPU是否处于繁忙状态的第一个指标是CPU的队列长度。
进程的三态模型如图9-18所示。
图9-18进程三态模型及其状态转换
按照进程在执行过程中的不同状况,至少可以定义三种不同的进程状态。
一个进程在创建后将处于就绪状态。每个进程在执行过程中,都处于上面三种状态中的某一种状态。同时,在一个进程执行过程中,它的状态将会发生改变。
运行状态的进程将由于出现等待事件而进入等待状态,当等待事件结束之后等待状态的进程将进入就绪状态,而处理器的调度策略又会引起运行状态和就绪状态之间的切换。引起进程状态转换的具体原因如下:
进程的五态模型如图9-19所示。
图9-19进程五态模型及其状态转换
相对于三态模型,五态模型增加以下两种状态:
引起进程状态转换的具体原因如下:
vmstat命令的基本使用方法如下:
vmstatintervalcount
Count指需要输入多少次结果。
例如:vmstat210表示每隔2秒输出一次结果,一共输出10次结果。
下文切换的显著增加,如cs比磁盘I/O和网络信息包速率高得多,这些都应该进一步检查。
分析完成CPU队列值之后需要进一步分析CPU的繁忙程度,分析CPU的繁忙程度主要从以下几个方面分析:
分析了CPU细分的百分比后,接下来应该继续分析CPU密集程序,分析CPU密集程序有两个标准工具,ps命令和top命令。
ps命令是一个灵活的工具,用来识别系统中运行的程序和它们使用的资源,它显示关于系统中进程的统计信息和状态信息,如线程或线程标识、I/O活动、CPU或内存利用情况。
一般使用ps命令需要分析三个可能输出的列:
需要获得最近使用CPU高度密集的用户进程,可以使用以下命令:
ps–ef报告如图9-20所示。
图9-21psau报告
通过top命令也可以获取CPU密集程序,top命令可以动态监控系统资源使用情况。
二、内存监控
VMM在处理虚拟地址空间时,会将虚拟地址空间划分成段,每段的大小是256MB,它是虚拟内存地址空间中一个邻接的部分,数据对象可以映射到该空间。进程对数据的寻址能力按段(或对象)的级别进行管理,所以段既可以在进程间共享,也可以进行专门维护,如进程可以共享代码段但拥有独立和专用的数据段。
虚拟内存段划分成固定大小的单元,把这种单元叫做页,缺省值页面大小为4096字节,但有一些系统也支持大页面,通常只能通过系统调用shmat访问。段中的每页在需要之前可位于内存(RAM)中,或存储在磁盘上,同样,实内存也可以划分成4096字节的页面帧,VMM的角色是管理分配实内存页面帧并且解析程序对虚拟内存页面的引用,这些页面当前不在实内存中或还不存在(例如,当进程第一次引用其数据段的某一页时),在任何给定时刻使用的虚拟内存数量可能比实内存大,所以VMM必须将余量存储在磁盘上。
SWAP又被称为交换分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见,但其访问速度远远慢于实内存的访问速度。
Active/inactive:活动和非活动内存,当前被process使用内存为活动内存,已经分配但是未被使用内存为非活动内存。
KernelUsageofMemory:在操作系统过程中,内核也需要使用内存,该值记录内核使用内存的情况。
监控内存使用情况的工具通常有:vmstat和ps。
Vmstat命令总结了系统中所有进程使用的总活动虚拟内存,以及空闲列表上实内存页帧的数量,活动的虚拟内存定义为虚拟内存中实际可以得到的工作段页面的数量。
vmstat210报告如图9-22所示。
图9-22vmstat210报告
从图9-22中到可以看出内存中buffer和cache分配情况,其中free是指空闲的内存,一个页面是实内存4KB的区域,系统维护内存页面的缓冲区,称为空闲列表,当VMM需要空间时可以很方便地访问此空闲列表。一般情况下如果free的值较大时swap的值则显示为零,因为当内存够用时就没有必须使用交换分区了,所以看到swap栏中的si/so两列的值也为零。
vmstat-s报告如图9-23所示。
图9-23vmstat-s报告
该报告详细列出了内存的使用数据,其中页面调进和页面调出的数量代表虚拟内存从页面空间和文件空间调进或调出页面的活动。
如实例psv,报告如图9-24所示。
图9-24psv报告
结果报告中重要列描述如下:
缺页故障引起的页面调进的数目,操作系统把所有I/O归于缺页故障,所以该项主要是I/O量的测量。
进程数据区的虚拟大小(在调页空间),用千字节表示(在其它标志中用SZ来表示),这个数目等于进程可用的工作段页数目的4倍。如果一些工作段页当前被调出,这个数字将大于所使用的实内存量,SIZE包含了私有段的页面和进程的共享库数据段。
进程实内存(驻留集合)的大小,用千字节表示。这个数值等于内存中的工作段页和代码段页数和的4倍,代码段页是为所有当前程序运行的实例所共享的,如果26个ksh进程正在运行,那么只能是ksh可执行程序的任何给定页面的一份副本位于内存中。
文本(共享程序)映像的大小,这是可执行文件的文本区域的大小,可执行程序文本区的页面是只能在用到时带入内存中的,即转移到内存或从内存装入。这个值表明可以装入的文本量的上限,TSIZ的值并不反映实内存的使用情况。
文本驻留集合(实内存)的大小,这个值等于进程可用的代码段页数值的4倍。
由内存中工作段和代码段页和的4倍(即RSS的值),再除以机器实内存的大小(单位为KB),再乘以100,四舍五入到最接近的百分点,这个指表明了进程使用的实内存,它不会夸大一个进程与其它进程共享程序文本的开销。
注意:ps命令并不表明共享内存段或内存映像段消耗的内存,因为许多应用程序使用共享内存或内存映像段。
如果需要获得物理内存和swap交换分区的详细信息可以使用procinfo命令。
三、磁盘监控
在介绍磁盘监控前,先介绍固定磁盘存储管理的性能,固定磁盘存储器的结构层次如图9-25所示。
图9-25固定磁盘存储器的层次结构
每个单独的磁盘驱动器称为一个物理卷(PV),它们各有一个名称,例如/dev/hdisk0,如果物理卷在使用,那么它属于一个卷组(VG),卷组中所有物理卷划分成相同大小(如果卷组包含的物理卷小于4GB,则缺省值是4MB,对于更大的磁盘该值为8MB或更多)的物理分区(PP)。
根据空间分配的用途,每个物理卷可以分成五个区域,根据磁盘驱动器的不同,每个区域中物理分区的数量也不同。在每个卷组中定义一个或多个逻辑卷(LV),每个逻辑卷由一个或多个逻辑分区组成,每个逻辑分区至少对应一个物理分区,如果指定为逻辑卷制作镜像,就需要分配额外的物理分区存储每个逻辑分区的额外副本,虽然逻辑分区是连续编号的,但底层的物理分区不必连续或邻接。
逻辑卷为系统用途提供服务(例如页面调度),但是每个容纳常规系统数据或用户数据或程序的逻辑卷都包含一个单独的日志文件系统(JFS或增强型JFS),每个JFS由页大小(4096字节)块的池组成。当数据要写入某个文件中时,会为这个文件分配一个或多个额外的块,这些块彼此和与先前分配给这个文件的其它块之间可能邻接也可能不邻接。
关于磁盘的监控应该重点考虑以下几方面的内容:
第一:查找当前最活跃的文件、文件系统和逻辑卷
第二:查看使用率最高的物理卷
一般的在对磁盘配置或调整参数做出重要改动之前,需要先对当前的配置和性能进行监控,得到一条评估的基线数据。
iostat53报告如图9-26所示。
图9-26iostat53报告
注意:如果在Linux未发现该命令,那么需要先安装sysstat包,安装命令为rpm–ivhsysstat-7.0.2-3.el5.i386。sysstat包中包括iostat、mpstat、sar和sa四个工具。
如果需要指定磁盘名称,可以使用-d选项。
例如:iostat–dsda1,报告如图9-27所示。
图9-27iostat-dsda1报告
sar命令是用来收集关于系统的统计数据的标准UNIX命令,通过该命的-d选项,可以详细的查看磁盘I/O的统计信息。
例如sar–d33的报告如图9-28所示。
图9-28sar-d33报告
如果需要测试磁盘写能力,使用以下命令
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生I/O,所以I/O都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。其中300000表示写的次数。
如果需要测试磁盘读能力,使用以下命令
因为/dev/sda1是一个物理分区,对它的读取会产生I/O,/dev/null是伪设备,相当于黑洞,of到该设备不会产生I/O,所以,这个命令的I/O只发生在/dev/sdb1上,也相当于测试磁盘的读能力。其中300000表示读的次数。
如果需要测试磁盘同时读写能力,使用以下命令
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生I/O(对/dev/sda1是读,对/test1.dbf是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。其中300000表示读的次数。
一般来说,高的%iowait表明系统存在一个应用程序问题、缺少内存问题或低效的I/O子系统配置,例如,应用程序的问题可能是由于许多I/O请求,而不是处理许多数据。理解I/O瓶颈并且要清楚解决瓶颈问题的关键在于提高I/O子系统的效率。磁盘的灵敏度可以以下几种方式出现,并具有不同的解决方法,一些典型的解决方案如下:
四、网络监控
如果系统的性能出现问题了,但发现其它指标并没任何问题,那么这很可能是由于网络原因导致系统的性能出现问题。如何判断是否是由于网络的原因导致系统性能受影响呢一个简单的办法是比较涉及网络的操作和与网络无关的操作,如果正在运行的程序在进行一定距离的远程读取和写入,而且运行很慢,但其它的操作是正常的,那这很可能是网络问题造成的,一些潜在的网络瓶颈可能由以下因素造成:
ping命令,在下面这些情况下ping命令有帮助:
关于ping命令常用参数项如下:
以10ms的间歇发送信息包或者在每次回应之后立即发送,只有根用户才可以使用这个参数项。
如图9-29所示的实例。
图9-29ping命令报告
注意:ping命令在网络上运行可能很困难,应该小心使用,连续执行ping命令只能由根用户操作。
如果测试过程中发送大量的信息包到目的地址,需要考虑如下几个方面的内容:
Netstat命令可以用来显示网络的状态,一般来说,它是用来于故障识别作为性能评定用的,通常该命令可以确定网络上的流量,从而可以确定性能故障是否由于网络阻塞所引起。netstat命令显示关于配置网络接上的流量,主要包括以下几方面:
netstat命令格式如下:
图9-30netstat-in命令报告
RX和TX这两列表示的是已准确无误地收发了多少数据包(RX-OK/TX-OK)、产生了多少错误(RX-ERR/TX-ERR)、丢弃了多少包(RX-DRP/TX-DRP),由于误差而遗失了多少包(RX-OVR/TX-OVR);最后一列展示的是为这个接口设置的标记,在利用ifconfig显示接口设置时,这些标记都采用一个字母。说明如下:
图9-31netstat-nr报告
输出结果中,第二列展示的是路由条目所指的网关,如果没有使用网关,就会出现一个星号(*)或0.0.0.0;第三列展示路由的概述,在为具体的IP地址找出最恰当的路由时,内核将查看路由表内的所有条目,在对找到的路由和目标路由比较之前,将对IP地址和genmask进行按位“和”计算;第四列显示了不同的标记,这些标记的说明如下:
Flags:显示标记信息,常用标记如下:
如果需要显示活动或被动套接字的信息,可使用选项-t、-u、-w和-x,其分别表示TCP、UDP、RAW和UNIX套接字连接。如果还需要显示出等待连接(也就是说处于监听模式)的套接字,可以使用-a标记,这样就能得到一份服务器清单,当前所有运行于系统中的所有服务器都会列入其中。
图9-32netstat-nr报告
本章主要讲解了关于“性能测试—Linux/Unix操作系统监控”的内容,大家喜欢的话可以每天来这里和小编一起学习涨薪技能哦。(笔芯)