资源描述
第八章Linux常用系统管理技术一个好的服务器,除了具备完善的功能外,还要有良好的性能,并保证足够的可用性。为了实现这些目的,首先需要管理员对系统进行监测,并根据监测的情况调整系统性能。对进程的监视和管理可以让管理员全面了解系统的运行状况,并对系统进行详细的控制。本章将就这些内容展开全面的讨论,目的是让用户初步掌握Linux系统管理的基本概念和常用操作,以便于更好的维护一个Linux服务器。8.1 系统监视对系统进行监测,可以帮助管理员了解系统的运行情况,从而知道系统是否正常工作,性能是否满足工作要求。系统的监测包括各个方面,如用户活动的监测、系统信息查看以及性能监测等。 8.1.1 用户监测Linux是一个多用户多任务的操作系统,在多用户环境下,每个用户可能都在执行不同的任务。管理员可以通过相应的监视 ,查看其他用户的活动。要查看当前系统上有哪些用户登录,可以使用who命令。从上述命令的返回信息可以看到有两个用户登录到系统上,root用户在控制台tty1登录,另一个用户lch通过控制台tty3登录到了系统上。who命令只能看到系统上有哪些用户登录,无法监视用户的具体工作。为了看到用户执行的进程,可以使用w命令。w命令返回信息的第一行分别是系统当前时间、系统自开机以来持续运行的时间、系统上当前有多少个用户以及系统的平均负载。平均负载描述系统的总体工作负载情况,是一个重要的系统性能数据,此处返回的平均负载分别为最近1.5.15分钟内的负载。以下诸行分别显示各个已登录用户的运行程序的情况,其中各列内容分别为用户名、登录位置、登录时间、空闲时间、tty的CPU占用时间、进程的CPU占用时间和运行的程序。管理员还可以使用last命令查看系统的历史登录情况。要查看系统整体的登录历史记录,可以直接运行last命令;要查看某个用户的登录历史记录,可以在last命令后加上用户名。长期运行的系统上可能有很多记录,可以在last命令中加入选项列出指定的行数,上图就是查看root用户的最近5次登录。 8.1.2 系统信息查看Linux系统的/proc目录是一个虚拟文件系统,该目录中存放的是内存中的信息的映像,而不是真正的磁盘文件,所以此目录只能读取,不能写入且大小为0。通过/proc目录我们可以看到内核的数据结构,从而了解系统的运行情况。/proc目录中大部分文件是只读的,但也有一些文件是可以修改的系统内核变量。/proc目录中以数字标识的子目录是以对应进程的进程号命名的,里面存放的是各个进程的运行信息。其他一些文本文件则分别存放系统某个方面的运行信息。要获得CPU的具体信息可以使用命令查看/proc/cpuinfo文件。当只有一个CPU的时候,processor编号为0;当为1的时候,表示有两个CPU或者CPU为双核类型。通过输出的信息可以清楚的看到,CPU的型号是Pentium(奔腾),主频是3.00GHz。要获得系统内存的具体使用情况,可以运行以下命令:另外,Linux系统在/var/run目录中保存一些重要进程的进程号。例如要查看crond进程的进程号,可以运行以下命令: 8.1.3 性能监测系统的性能包括多个方面,最主要的是能够分析在系统的哪一方面出现了性能瓶颈,然后针对具体瓶颈形成的原因,再对系统做出相应的调整,其中可能涉及计算机硬件、操作系统、应用程序等各个方面。所谓瓶颈是指那些对系统的性能起决定性影响的因素。不同的应用系统,性能瓶颈也会有所不同。例如繁忙的文件服务器的性能瓶颈一般会是磁盘子系统,大量用户在线的应用程序服务器的性能瓶颈可能会是CPU子系统,而各种Internet网络服务器的性能瓶颈通常是带宽。概括来讲,常见的性能瓶颈包括以下几个部分:CPU、内存以及系统的各个I/O设备。1、CPU性能监测众所周知,CPU决定着系统的运算能力,系统内所有的程序指令都是经过CPU处理的,由于Linux自身是一个多用户多任务的操作系统,因此CPU同时处理着来自不同优先等级的程序,如果过多的程序同时执行,CPU就有可能形成系统的性能瓶颈。注:近几年CPU技术飞速发展,除了主频不断提升以外,双核CPU甚至四核CPU也已逐渐普及,CPU称为系统性能瓶颈的情况已经越来越少了。系统中运行的所有程序都需要一定数量的物理内存,尽管现在市场上的内存产品的内存容量也都成倍的增长,但是新的系统软件和应用程序的出现也都对内存提出了更高的要求,因此内存依然是系统中最有可能形成瓶颈的部分。当程序所需要的内存数量超过物理内存时,系统会采用分页技术(Windows)或者交换技术(Linux),即将程序进程的一部分或全部移到硬盘上,以便为新的进程腾出空间,这就是我们常说的虚拟内存。系统的I/O设备主要是负责系统数据的输入输出,如各类磁盘、打印设备、键盘以及设备等,由于I/O设备的运行速度比CPU的指令处理速度要慢得多,因此,当一个程序进程包含了一个或数个I/O设备操作时,进程往往会等待I/O设备的操作结束而处于等待状态,由此形成系统的瓶颈。关于CPU的总体情况,可以使用sar命令进行查看。命令格式为:sar options interval count其中interval为数据采样的时间间隔,count为数据采样次数。我们可以根据需要按照一定的采样间隔收集一定时期内的性能数据,对一定时间内的性能数据进行分析,可以了解系统的性能状况。为了更准确的评估系统的性能,应该分析一段时间内而不是单纯某个具体时刻的性能数据。例如要每隔3秒收集一次CPU性能数据,共收集3次,可以运行以下命令:以上信息表示sar命令从什么时间开始采集每隔3秒采集一次数据,并把CPU的时间占用比率进行了分类。%user列表示用户级别下的应用程序的CPU时间占用率,%nice列表示用户级别下特权进程的CPU时间占用率,%System列表示系统级别下的CPU时间占用率,%iowait列表示CPU等待磁盘I/O完成的时间比率,%idle表示CPU空闲时间百分比。2、内存性能监测计算机的内存是有一定容量的,当所需要的内存数量超过物理内存的容量时,系统会使用虚拟内存的分页技术和交换技术,即将程序进程的一部分或全部移到硬盘上,以便为新的进程腾出空间,当分页和交换不太频繁时,系统是完全可以接受的,当频繁地进行分页和交换时,系统性能就会受到影响,从而形成性能瓶颈。free命令可以用来查看内存和虚拟内存的使用情况,具体实例如下:Men行显示的是物理内存;Swap行显示的是虚拟内存。used列显示被使用的内存数量;free列显示未使用的内存数量;share显示多个进程共享的内存总额;buffers列显示磁盘缓存的当前大小。因为free命令默认只会显示一次存储器使用率,要进行一段时间的内存使用监视,可以使用-s选项指定一个时间间隔(单位秒)进行持续的监测:以上命令会每隔3秒监测一下内存的使用。要全面监视内存性能,可以使用vmstat命令。vmstat命令可以显示物理内存和虚拟内存的有关状态,同时也可以显示CPU的大量信息。我们对这个例子进行分析: “r”“b”是procs字段的内容,分别是指准备就绪等待运行的进程数量和处于不可中断的休眠状态的进程数量。所谓不可中断的休眠进程状态是指进程说道任何信号都不会被唤醒成为可运行状态,将一直等待硬件状态的改变。 memory列里的swpd、free、buff、cache分别是指虚拟内存的使用量和空闲物理内存、内存缓冲区、高速缓存的大小。 swap列的si和so分别是指交换到磁盘和从磁盘中取出的每秒字节数。 io列的bi和bo分别是写入到块设备和从块设备中读取的每秒块数目。 system列的in和cs分别是指每秒中断和每秒交换的数目。 cpu列是指以下几项占用CPU时间的百分比:us是用户时间,sy是系统时间,id是空闲时间,wa表示I/O的时间。命令vmstat也可以指定数据采样间隔和采样次数,即使用如下格式:语法:vmstat interval count3、磁盘I/O性能监测由于磁盘设备的运行速度比CPU的指令处理速度要慢得很多,因此涉及磁盘操作的部分是整个进程执行过程中最慢的操作。尽管磁盘自身硬件技术如转速、缓存等不断提高,但是磁盘依然很容易形成系统性能的瓶颈。Iostat命令是最常见,最简单的用来检查各个磁盘输入输出情况的命令工具,它可以用来统计磁盘的数据吞吐量和传输请求等数据。直接在提示符后输入iostat执行:avg后面的内容是针对CPU的显示,相关参数的含义见命令vmstat的注释。Device后面的内容是针对磁盘的数据使用情况的统计,相关参数的含义如下: tps:每秒IO请求的个数 Blk_read/s:每秒读出得块数目 Blk_wrtn/s:每条写入的块数目 Blk_read:读出的块数目 Blk_wrtn:写入的块数目iostat命令的使用方法与sar和vmstat命令相似,可以使用以下格式:格式:iostat interval count另外还可以使用sar b命令查看系统I/O的性能情况,该命令会以10分钟作为一个间隔显示最近一段时间以来的I/O情况。注:sar和iostat命令都是由sysstat软件包提供,如果找不到sar和iostat命令,可从安装光盘中使用rpm命令安装此软件包。8.2 进程管理 8.2.1 监视进程进程是一个动态的概念,操作系统中每个运行中的程序至少由一个以上的进程组成。进程一般被局限在分配给它的内存和CPU时间中,程序运行结束后,程序对应的进程也就不存在了。通过监视进程的活动,可以了解到系统的详细运行情况。在Linux系统中,最常用的进程监视工具是ps和top。ps命令可以列出系统中的所有进程,包括进程的状态、占用内存数、CPU时间、进程的拥有者、运行时间等。为了实现这些功能,ps提供以下选项: -a:列出带有控制终端的所有用户的进程 -r:只列出正在运行的进程 -x:列出没有控制终端的进程(后台进程) -u:列出进程的拥有者 -f:列出进程之间的父子关系直接运行ps命令只能看到当前用户的进程消息:上面的输出内容说明,当前用户运行了两个进程,一个是bash,一个是ps。为了得到更多进程的详细信息,经常使用ps命令的组合选项aux:上述输出结果只是一部分,各列的含义如下: USER:进程的拥有者 PID:进程号 %CPU:进程占用CPU百分比 %MEM:进程占用内存的百分比 VSZ:进程占用虚拟内存的数量 RSS:进程驻留内存的数量 TTY:进程的控制终端,如某个进程的控制终端显示为“?”则表示该进程不参与任何一个控制终端相关联 STAT:进程的运行状态,具体运行状态如下: R:准备就绪等待运行状态 S:可中断的休眠状态,满足一定条件时就会成为R状态 D:不可中断的休眠状态 T:已被终止或者正被纠错程序追踪 Z:昏迷。出现昏迷状态的进程通常有两个原因:父进程退出时没有通过相应的手段通知子进程结束;父进程被异常终止而无法通知其子进程。昏迷进程的出现通常与软件编写质量有关另外在STAT列中通常还会带有几个状态说明符,其含义分别是:“ /tmp/1.txt前面的5个字段依次分别是分钟、小时、日期、月份、星期。另外还有几个特殊的符号是“*”、“/”、“-”、“,”等,其中“*”代表取值范围内的所有数字,“/”代表每的意思,例如“* /5”如果在分钟栏里就是每5分钟,如果在小时栏里就是代表每5个小时,“-”代表从某个数字到某个数字,“,”表示分开的几个不连续的数字。下面是一个比较全面的例子:* /10 6-8 1,15 * ls /tmp/1.txt上面的例子的意思是:每个月的1号和15号的早上6点到8点,每隔10分钟执行一次命令“ls /tmp/1.txt”。每次编辑完某个用户的cron设置后,crond自动在/var/spool/cron下生成一个与此用户名同名的文件,cron启动后每分钟都会读取一次这个文件,以检查里面是否有要执行的命令。因此该文件编辑完成后不需要重新启动crond服务。 8.3.3 cron的相关文件1、cron启动脚本作为Linux中标准的服务程序运行,启动脚本的名称是“crond”,位于目录“/etc/init.d/”中。2、cron的配置文件和目录cron有多个目录和文件用户设置cron任务,对于不同类型的任务cron使用不同的配置文件。例如,文件“/etc/crontab”是RHEL5.4中系统预设的任务,目录“/var/spool/cron”中的配置文件是用户自己的cron任务。(1)系统任务配置文件-crontab“/etc/crontab”文件中设置的是Linux系统维护所需的任务,一般不需要人为去修改。(2)任务脚本目录根据“/etc/crontab”文件中的设定,crond将按照不同的周期执行相应的cron脚本目录中的任务脚本。如“/etc/cron.daily”目录中存放的是每日执行一次的系统任务。“/etc/cron.daily”目录中的文件都是需要执行的Bash脚本。(3)用户cron任务配置目录所有用户的cron任务(使用crontab命令创建的任务)都被保存在目录“/var/spool/cron”和用户名相对应的文件中。 8.3.4 at任务计划在使用at命令进行任务设定之前,首先要确认at命令所对应的守护进程atd是否运行:还需要使用date命令查看当前系统的时间。在at命令中设置的任务执行日期和时间必须在当前的系统时间之后,否则任务无法正确设置。at命令后可以跟具体的时间作为参数,设定任务计划。at命令执行后将在命令行中等待用户输入需要执行的命令(任务),用户可以输入多条命令;命令设置完成后使用Ctrl+D组合键结束at命令的执行;at命令会在屏幕中显示任务设置的结果。atq命令用于查询系统中设置的还没有被执行的at任务,每个at任务都会有一个任务编号代表该任务的存在,已执行的at任务将不出现在atq命令显示的列表中。使用atrm命令可以删除指定任务编号的at任务,删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中,atrm命令不能删除已经执行的任务。使用at命令设置定时执行任务时,如果设置任务的执行时间和当前的系统时间间隔过小(1-2分钟),at任务的执行将会有一定时间的延迟(4分钟左右)。at命令后面至少需要一个时间参数,这里的time参数可以是下列格式中的一种。 HH:MM格式,例如本例中的18:00,另外时间后面还可以跟AM或PM来表示上午或者下午,如果今天的时间已过,它就会在第二天的这一时间执行。 MMDDYY、MM/DD/YY、MM.DD.YY格式:例如121510表示2010年12月15日。 英文“月份 日期 年份”格式:例如,January 15 2011表示2011年1月15日,年份可以省略。 +时间:时间以minutes、hours、days和weeks为单位。例如“at 1:00AM +1days”代表命令应该在1天之后的1:00AM执行。 midnight:表示12:00AM noon:表示12:00PM teatime:表示4:00PMat命令可以使用“-t”选项指定任务执行的时间(日期),时间设定的格式为“MMDDhhmm”,其中“MM”表示月份;“DD”表示日期;“hh”表示小时;“mm”表示分钟。调度任务计划由于是系统后台自动完成的,因此进行设置时要格外小心,不正确的自动任务调度会引起系统运行的异常。还有一个可以指定任务计划的命令是batch命令,batch命令的用法与at类似,不同的是batch作业仅在系统负载值低于0.8时才执行。所以batch常用来执行一些不太重要以及消耗资源比较多的维护任务。在此不再详述batch命令,可以查阅相关资料。8.4 日志管理 8.4.1 日志的功能日志文件(log files)是记录Linux中系统消息的文件。不同的日志文件记载不同类型的消息,包括内核、服务以及在系统中运行的应用程序的信息。日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。 8.4.2 主要日志文件1、日志文件的位置在Linux系统中所有的日志文件都放置在目录“/var/log/”中,有些程序使用单独的日志文件,而有些大型的服务器程序由于日志文件不止一个,所以会在“/var/log/”目录中创建单独的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰又可以快速的定位日志文件。2、日志文件的分类在Linux系统中,日志文件通常可分为两大类: 应用程序独立管理的日志文件:由于应用程序只管理自己的日志文件,所以日志文件之间的格式差异很大,没有统一的日志消息格式 受syslogd服务统一管理的日志文件:Linux系统中有相当一部分程序把自己的日志文件交由syslogd服务统一管理,因此这些日志文件都具有相同的格式从syslogd服务的配置文件“/etc/syslog.conf”中可以看到,受syslogd服务管理的日志文件都是Linux系统中最主要的日志文件,他们记录了Linux系统中用户认证、邮件、cron等最基本的系统消息。8.4.3 日志文件分析日志文件其实是纯文本文件,每一行都是一个消息,只要是在Linux下能够处理纯文本的命令工具都能用来查看日志文件。日志文件通常是很大的,因此从Linux系统启动开始,消息就不断地积累在日志文件中,因此用cat命令将日志文件显示到屏幕上时,会因为现实滚动的太快二看不清文件的内容,查看日志文件比较好的方法是用more或less这样的分页显示命令,也可以使用grep命令在日志文件中查找特定的消息。由程序独立管理的日志文件的格式各不相同,在此就不再一一说明了,可以在程序的相关文档中查找格式的说明。由syslogd服务管理的日志文件具有相同的消息记录格式,下面以“messages”文件为例来说明日志文件的格式。日志文件中每一行表示一个消息,每个消息由4个字段的固定格式组成: 时间标签(timestamp):消息发出的日期和时间 主机名(hostname):生成消息的计算机的名字 生成消息的子系统的名字:发出消息的程序名称 消息(message):消息的内容本章实验任务一:设置形式运行的应用程序实验目的:为了对Linux主机硬盘空间的变化情况进行观察和分析,需要使用cron服务添加一个每天执行的任务,该任务的执行要求如下:1、 每天的0天0分自动执行2、 将每天的任务执行结果追加保存到文件df.log中3、 在任务中使用date命令显示任务执行的日期和时间4、 在任务中使用df命令显示系统的硬盘分区情况完成标准:1、 能够确认运行cron任务必要的软件包已经安装2、 能够查看crond服务的运行状态3、 能够查看用户的cron任务4、 能够为用户添加cron任务5、 能够验证cron任务的执行任务二:查看分析系统日志文件完成标准:1、 能够定位Linux系统中的日志文件保存目录2、 能够浏览日志文件“/var/log/messages”的内容3、 能够根据日志文件的内容进行日志分析本章练习题选择题1、在Linux系统中,( )目录用于保存日志文件A、/etc/log/B、/var/logC、/var/syslog/D、/var/spool2、下面命令( )不能监视与CPU相关的性能A、topB、psC、freeD、iostat3、下面命令可以对进程进行优先级调整的是( )A、killB、niceC、psD、sleep4、在使用kill命令终止一个很消耗资源的进程时,最强的信号值是( )A、15B、9C、1D、05、可以对系统进行周期性维护的任务计划工具是( )A、atB、batchC、cronD、atd6、可以通过对( )文件的编辑来配置crondA、/etc/crontabB、/var/spool/cronC、/etc/at.denyD、/etc/at.allow7、下面( )表达的不是“1号和10号的早上8点到10点,每隔15分钟执行一次命令ls/tmp/test.txt”A、* /15 8-10 1,10 * * ls/tmp/test.txtB、0,15.30,45 8-10 1,10 * * ls/tmp/test.txtC、* /15 8-10 * 1,10 * ls/tmp/test.txtD、2,20,35,50 8-10 1,10 * * ls/tmp/test.txt8、判断at服务是否在运行的命令是( )A、service atd statusB、rpm q at C、service atd start D、service atd stop9、取消at作业的命令是( )A、atqB、atrmC、at timeD、Ctrl+D10、top命令中( )交互式命令可以调整进程优先级A、kB、rC、dD、p简答题1、 列举出Linux系统中查看进程信息的几种方法2、 Linux系统中,制作cron任务计划的步骤
展开阅读全文