《LINUX系统故障诊断与排除.docx》由会员分享,可在线阅读,更多相关《LINUX系统故障诊断与排除.docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、LINUX系统故障诊断和排除 2007-4-17 14:30:00 3.1top3.2sar3.4iostat3.5free本章解释如何使用适用于Linux大量性能工具及每个工具中信息意义。即使已经使用top或者sar,也可能从本章学到相关知识。应该养成使用这些工具习惯。当然要知道如何诊断性能问题,但也应该定期寻找可能指示问题关键指标变化。可以使用这些工具衡量新应用程序对性能影响。就如同查看车内温度表一样,要注意Linux系统性能指标。本章介绍工具有: top sar vmstat iostat free可以作为普通用户运行这些工具。它们都利用/proc文件系统得到它们数据。这些性能工具和几个
2、rpm一起提供。procps rpm提供top、free和vmstat。sysstat rpm提供sar和iostat。top命令是一个优秀交互式实用工具,用于监视性能。它提供关于整体Linux性能几个概要行,但是报告进程信息才是top真正长处。可以广泛自定义进程显示,也可以添加字段,按照不同指标排序进程列表,甚至从top注销进程。sar实用工具提供监视每一事件能力。它至少有15个单独报告类别,包括CPU、磁盘、网络、进程、交换区等等。vmstat命令报告关于内存和交换区使用广泛信息。它也报告CPU和一些I/O信息。iostat报告存储输入/输出(I/O)统计资料。这些命令覆盖许多相同地方。本
3、节讨论如何使用这些命令并解释每个命令产生报告,并不讨论所有15种sar语法,但是介绍了其中最常见。3.1 toptop命令是最流行性能工具之一。大多数系统管理员运行top查看Linux和UNIX系统运行情况。top实用工具提供一种监视进程和Linux整体性能理想方法。将Linux进程称作任务更准确,但是在本章中我们还是将它们称作进程,因为这个工具也这样称呼它们。1普通用户和root用户都可以运行top。图3-1显示一个空闲系统典型top输出。图3-1 top输出top显示有两个部分。大约前三分之一显示关于Linux整体信息,其余行为各个进程信息。如果扩展窗口则显示更多进程而填充整个屏幕。更全面
4、Linux信息可以通过使用top之外几个命令来得到。不过,通过一个命令在一个屏幕上显示所有信息比较理想。第一行显示最近1分钟、5分钟和15分钟负载平均值。负载平均值表示在CPU上运行或者等待运行多少进程。uptime命令也可以用来显示负载平均值。接下来是进程信息,之后是CPU、内存和交换区。内存和交换区信息和free命令输出类似。在我们确定内存和CPU使用之后下一个问题是哪些进程正在使用它。大部分进程信息也可以通过ps命令得到,但是top提供一种更易于阅读格式。最有用是用于提供帮助h,它列出top其他交互式命令。3.1.1 添加和移除字段字段可以从显示中添加或移除。进程输出可以按照CPU、内存
5、或者其他指标排序。这是一个查看什么进程抢夺内存理想方法。各个Linux发布版本top语法和交互式选项不同,帮助命令可以快速列出什么命令可用。有许多交互式选项可用,用户应该花费一些时间来试验它们。图3-2显示Red Hat Enterprise Linux ES release 3帮助屏幕。图3-2 top帮助屏幕f命令用来从top输出中添加或者移除字段。图3-3是一个Red Hat Enterprise Linux ES release 3帮助屏幕,显示什么字段可以添加。图3-3 top添加/移除字段屏幕图3-4显示一个SUSE Linux 9.0 top帮助屏幕,可见它们提供命令差别非常大。
6、图3-4 SUSE top帮助屏幕3.1.2 解释输出让我们研究top信息意义,以top如下输出为例:top输出第一行显示负载平均值信息:这个输出和uptime输出类似。从中可看到Linux已经运行时间、当前时间和用户数量,以及1分钟、5分钟和15分钟负载平均值。接下来显示进程概要:我们看到总共有73个进程,其中72个进程正在休眠,一个进程正在运行,没有僵化进程或者被停止进程。当一个进程退出并且它父进程没有通过wait(2)或者waitpid(2)函数等待它时,它就会成为僵化进程。这通常是由于父进程在它子进程之前退出造成。不同于进程表中项,僵化进程不使用资源。停止进程是已经向它发送STOP信号
7、进程。更多信息,请参见signal(7)手册页。接下来是CPU信息:CPU行描述CPU如何使用它们CPU周期。top命令报告CPU在用户或者内核模式、运行良好进程以及处在空闲状态时所花费时间百分比。iowait列显示没有进程在CPU上运行时,处理器等待I/O完成时间百分比。irq和softirq列表示处理硬件和软件中断所花费时间。早于2.6版本Linux内核不报告irq、softirq和iowait。接下来是内存信息:前三个指标提供内存使用概要,列出了总可用内存、已使用内存和自由内存,它们都是确定对于Linux内存是否足够所需信息。接下来五个指标标识已使用内存如何分配。shrd字段显示共享内存
8、使用,buff是缓冲使用内存。分配给内核或者用户进程内存可以处在三种不同状态:活动(active)、不活动脏(inactive dirty)和不活动干净(inactive clean)。活动在top中用aotv表示,表示该内存最近被使用。不活动脏在top中用in_d表示,表示该内存最近没有使用,可以回收。要回收内存,必须将它内容写到磁盘,这个进程命名为“清洗”,也可称作内存第四种临时状态。一旦被清洗,不活动脏内存成为不活动干净内存,在top中用in_c表示。由Norm Murray和Neil Horman合著Understanding Virtual Memory in Red Hat Ent
9、erprise Linux 3是一本优秀参考书,网址为http: rhel3_vm.pdf。接下来是交换区信息:av字段是可用交换区总量,之后是已用数量和自由数量,最后是内核用于缓存内存数量。top显示其余部分是进程信息:top显示尽可能多能适合屏幕进程。top(1)手册页中提供了字段说明描述。表3-1提供了这些字段概要。表3-1 top进程字段字 段说 明PID进程id编号USER进程所有者用户名PRI进程优先级SIZE进程大小,包括它代码、栈和数据区域,以千字节为单位RSS进程使用内存总量,以千字节为单位SHARE进程使用共享内存数量STAT进程状态,通常R表示运行,S表示休眠%CPU自从
10、最近屏幕更新以来,这个进程使用CPU百分比%MEM这个进程使用内存百分比TIME自从进程启动以来,这个进程使用CPU时间量CPU最近执行进程CPUCOMMAND正在执行命令3.1.3 保存自定义一个非常好top功能是保存当前配置。可以使用交互式命令s任意更改显示,然后按w保存该视图。top在用户主目录中写入一个.toprc文件,用来保存配置,以便下一次这个用户启动top时使用相同显示选项。top也寻找默认配置文件/etc/toprc。这是一个全局配置文件,当任何用户运行实用工具时,top将读取该文件。这个文件可以使top以安全模式运行,也可以设置刷新延迟。安全模式阻止非root用户注销或者更改
11、进程正常值,也阻止非root用户更改top刷新值。Red Hat Enterprise Linux ES release 3一个/etc/toprc示例文件如下所示:s表示安全模式,3定义三秒钟刷新间隔。其他发布版本可能有不同/etc/toprc格式。注销进程是一个非常实用功能。如果用户有一个失控进程,通过top命令可以轻易找到并注销它,具体步骤为:运行top,通过u命令显示用户所有进程,然后使用k注销它。top不只是一个优秀性能监视工具,它也可以用来通过注销那些产生问题进程从而改进性能。3.1.4 批处理模式top也可以以批处理模式运行。尝试运行以下命令:-n 1告诉top只显示一次迭代,-
12、b选项表示以适合写入文件文本形式输出或者定向到另一个程序(例如less)。类似以下两行脚本命令可以顺利完成cron工作:可以将它添加到crontab,并每隔15分钟收集一次输出。通过批处理可以轻松完成所有任务,无需用户干涉。所有进程都被列出,输出并不是每5秒钟刷新一次。如果用户主目录中存在一个.toprc配置文件,那么它用来格式化显示。以下是在一个多CPU Linux服务器上运行top批处理模式输出。注意,其中没有显示top输出所有258个进程。现在读者可能明白了为什么top会如此流行。top交互式本质和容易自定义输出能力使它成为诊断问题优秀工具。3.2 sarsar是一个优秀一般性能监视工具
13、,它可以输出Linux所完成几乎所有工作数据。sar命令在sysetat rpm中提供。示例中使用sysstat版本5.0.5,这是稳定最新版本之一。关于版本和下载信息,请访问sysstat主页。sar可以显示CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。最重要sar功能是创建数据文件。每一个Linux系统都应该通过cron工作收集sar数据。该sar数据文件为系统管理员提供历史性能信息。这个功能非常重要,它将sar和其他性能工具区分开。如果一个夜晚批处理工作正常运行两次,直到下一个早上才会发现这种情况(除非被叫醒)。我们需要具备研究12小时以前性能数据能力。
14、sar数据收集器提供了这种能力。有许多报告语法,我们首先讨论数据收集。3.2.1 sar数据收集器sar数据收集通过/usr/lib/sa中一个二进制可执行文件和两个脚本来完成。sar数据收集器是一个位于/usr/lib/sa/sadc二进制可执行文件。sadc工作是写入数据收集文件/var/1og/sa/。可以为sadc提供几个选项。常见语法是:间隔是取样间秒数,iterations是要取得样本数量,定义输出文件。简单sadc语法是/usr/lib/sa/sadc 360 5/tmp/sadc.out。这个命令在5分钟间隔取得5个样本并将它们保存在/tmp/sadc.out。我们应该定期收集
15、样本,因此需要一个由cron运行脚本。应该把样本放在一个有意义地方,如在前一节中使用top脚本时那样。sysstat rpm提供/usr/lib/sa/sa1脚本来完成所有这些事情。sa1(8)手册页比sa1脚本本身要长得多。/usr/lib/sa/sa1是一个非常简单脚本,使用语法sadc -F -L 1 1 /var/log/sa/sa#来运行sadc,其中#是某月日期。较老版本sa1使用date+.%Y_%m_%d输出作为文件后缀。如果需要,可以使用-F选项使sadc强制创建输出文件。-L在写入输出文件之前锁定它,以防止两个sadc进程同时运行时损坏该文件。较老版本sadc没有-L选项,
16、因此sa1脚本执行手工锁定。sa1脚本选项只是样本之间间隔和取样迭代次量。cron文件(/etc/cron.d/sysstat)和sysstat一起提供,在各sysstat版本之间它有所不同。以下是5.0.5版本sysstat条目:可见,在sysstat rpm安装之后,sadc开始取得样本。sysstat主页是 sebastien.godard/2。文档链接提供以下类似2006年1月14日crontab方案:Sebastien Godard网站crontab示例建议周一至周五从早晨8点到下午6点每10分钟取一次样本,其他时间每小时取得一个样本(注意,crontab注释为下午7点,但实际上是1
17、8:00,即下午6点)。如果/var中磁盘空间足够,可以每天都每小时每10分钟取样一次。如果周末备份较慢,每小时一次sadc取样可能帮助不大。现在让我们研究更流行报告语法。3.2.2 CPU统计数据sar -u输出显示CPU信息。-u选项是sar默认选项。该输出以百分比显示CPU使用情况。表3-2解释该输出。表3-2 sar -u字段字 段说 明CPUCPU编号%user在用户模式中运行进程所花时间%nice运行正常进程所花时间%system在内核模式(系统)中运行进程所花时间%iowait没有进程在该CPU上执行时,处理器等待I/O完成时间%idle没有进程在该CPU上执行时间这些看起来应该
18、比较熟悉,它和top报告中CPU信息内容相同。以下显示输出格式:其中5 10导致sar以5秒钟间隔取得10个样本。任何sar报告第一列都是时间戳。我们本来可以研究使用-f选项通过sadc创建文件。这个sar语法显示sar -f/var/log/ sa/sa21输出:在多CPU Linux系统中,sar命令也可以为每个CPU分解该信息,如以下sar -u -P ALL 5 5输出所示:3.2.3 磁盘I/O统计数据sar是一个研究磁盘I/O优秀工具。以下是sar磁盘I/O输出一个示例。第一行-d显示磁盘I/O信息,52选项是间隔和迭代,就像sar数据收集器那样。表3-3列出了字段和说明。表3-3
19、 sar -d字段字 段说 明DEV磁盘设备tps每秒传输数(或者每秒IO数)rd_sec/s每秒512字节读取数wr_sec/s每秒512字节写入数512只是一个测量单位,不表示所有磁盘I/O均使用512字节块。DEV列是dev#-#格式磁盘设备,其中第一个#是设备主编号,第二个#是次编号或者连续编号。对于大于2.5内核,sar使用次编号。例如,在sar -d输出中看到dev3-0和dev3-1。它们对应于/dev/hda和/dev/hdal。请看/dev中以下各项:/dev/hda有主编号3和次编号0。hda1有主编号3和次编号1。3.2.4 网络统计数据sar提供四种不同语法选项来显示网
20、络信息。-n选项使用四个不同开关:DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示关于网络错误统计数据,SOCK显示套接字信息,FULL显示所有三个开关。它们可以单独或者一起使用。表3-4显示通过-n DEV选项报告字段。表3-4 sar -n DEV字段字 段说 明IFACELAN接口rxpck/s每秒钟接收数据包txpck/s每秒钟发送数据包rxbyt/s每秒钟接收字节数txbyt/s每秒钟发送字节数rxcmp/s每秒钟接收压缩数据包txcmp/s每秒钟发送压缩数据包rxmcst/s每秒钟接收多播数据包以下是使用-n DEV选项sar输出:关于网络错误信息可以用s
21、ar -n EDEV显示。表3-5列出了显示字段。表3-5 sar -n EDEV字段字 段说 明IFACELAN接口rxerr/s每秒钟接收坏数据包txerr/s每秒钟发送坏数据包coll/s每秒冲突数rxdrop/s因为缓冲充满,每秒钟丢弃已接收数据包数txdrop/s因为缓冲充满,每秒钟丢弃已发送数据包数txcarr/s发送数据包时,每秒载波错误数rxfram/s每秒接收数据包帧对齐错误数rxfifo/s接收数据包每秒FIFO过速错误数txfifo/s发送数据包每秒FIFO过速错误数SOCK参数显示IPCS套接字信息。表3-6列出显示字段及其意义。表3-6 sar -n SOCK字段字
22、段说 明totsck使用套接字总数量tcpsck使用TCP套接字数量udpsck使用UDP套接字数量rawsck使用raw套接字数量ip-frag使用IP段数量sar可以产生许多其他报告。我们有必要仔细阅读sar(1)手册页,查看是否有自己需要其他报告。3.3 vmstatvmstat命令也是显示Linux性能指标方法,它报告了许多信息,理解这些信息有一定难度。输出分为6个类别:进程、内存、交换区、I/O、系统和CPU。和iostat类似,第一个样本是从最近重新启动以来平均值。以下是一个典型vmstat输出:-m选项使内存字段以兆字节为单位显示。vmstat和许多其他性能命令一样使用取样间隔和
23、计数参数。进程(procs)信息有两列。r列是可运行进程数量,b列是阻塞进程数量。内存部分有4个报告虚拟内存如何使用字段。表3-7列出这些字段及其意义。表3-7 vmstat内存字段字 段说 明Swpd已用交换空间数量free自由RAM数量buff缓冲使用RAM数量cache文件系统缓存使用RAM数量接下来是交换(swap)指标。交换只是一个古老术语,但是显然不会消失。交换涉及分页读取或写入磁盘进程所消耗所有内存。它将显示系统达到性能指标水平。而Linux所做是,以小块方式按照需要对磁盘空间进行分页操作。因此,我们可能应该停止说交换到磁盘内存,并开始说分页到磁盘内存。对于任何一种方法,表3-8
24、解释了相关字段。表3-8 vmstat交换字段字 段说 明si从磁盘分页到内存数量so从内存分页到磁盘数量在交换之后是两个I/O字段。这部分提供了一个简略介绍以帮助确定Linux是否正忙于完成许多磁盘I/O。vmstat只提供两个字段,显示出入磁盘数据量(参见表3-9)。表3-9 vmstat io字段字 段说 明bi从磁盘读入块bo写入磁盘块系统字段提供Linux内核进行进程管理繁忙程度摘要。中断和上下文开关参见表3-10。上下文开关指进程移出CPU或者移入CPU。表3-10 vmstat系统字段字 段说 明in系统中断cs进程上下文开关最后,CPU状态信息用总CPU时间百分比来表示,如表3
25、-11所示。表3-11 vmstat cpu字段字 段说 明us用户模式sy内核模式wa等待I/Oid空闲3.4 iostatiostat命令是另一个研究磁盘吞吐量工具。和sar类似,iostat可以使用间隔和计数参数。第一个间隔输出包含Linux总运行时间指标。和其他性能命令比较,这可能是iostat最独特功能。例如,以下是一个大部分时间处于空闲系统输出。可见,从启动以来hda设备已经读取大约9158MB(18755572*512/1024/1024)。Blk列是512字节块。不使用选项,iostat只显示覆盖启动以来全部时间一组指标。CPU信息包含基本上和top一样字段。iostat CP
26、U输出显示在用户模式中执行、执行正常进程、在内核(系统)模式中执行,进程等待I/O完成时处于空闲和没有等待进程时处于空闲CPU时间百分比。CPU行是所有CPU摘要。磁盘信息和sar -d提供信息类似。输出包括每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)总数量。iostat提供几个用于定制输出开关。最有用有: -c 只显示CPU行 -d 显示磁盘行 -k 以千字节为单位显示磁盘输出 -t 在输出中包括时间戳 -x 在输出中包括扩展磁盘指标这些选项可以组合。iostat -tk 5 2输出是:3.5 freefree命令输出内存和交换信息,和top命令作用非常相似。不使用选项,free以千字节为单位显示信息:free命令有少量选项,推荐使用-mt。-m开关使输出以兆字节为单位,-t开关提供一个合计行: