分享

第十九章 系统优化和参数调整

 czs321 2013-02-21

目标

 

在本章中,我们将给大家提供一些用于优化Linux系统性能的实用建议。帮助大家最大限度的优化系统中计算机的性能而无须购买额外的硬件。使用这些建议来改进Linux系统,计算机运行速度将会显著的提高。。做为一名优秀的系统管理员,在维护Linux系统时要经常对系统的性能进行监视和测试,才能准确无误的进行系统应用和硬件的调优工作。本章对系统调优工作给出一些参考,真正的本领还需要到实际应用中去掌握。

 

重点内容

 

      系统性能与优化概述

      系统优化的相关命令

      系统优化措施

 

 

 

 

 

19.1  系统性能优化概述

系统性能优化可以说是一门艺术。但系统性能优化并不是很简单和直观的,必须当作一个很复杂的任务。有时,性能优化会变成一项让人十分失望并且乏味的工作,尤其是在经过大量的分析之后所得到的结果仍然不可确定的时候。但是,对系统性能的优化是一项很有回报的工作,并且会给整个系统带来长期的益处。善于此道的人可使一个表面上几乎无法完成的任务顺畅地运行。

 

在本章中,我们提供了一些用于优化计算机性能的实用建议。帮助大家最大限度的优化系统中计算机的性能而无须购买额外的硬件。若使用这些建议来改进用户管理之下的计算机,它们的运行速度将会显著的提高。

 

性能构成要素

 

用于衡量计算机性能优劣的要素有很多。其中,将计算机执行同一任务的CPU周期进行比较是很有意义的,这种比较可以在一台计算机与其他计算机间,或是重新配置后的同一台计算机之间进行。存储器的使用,包括交换内存的使用,是另外一个用于评估性能的要素。硬件性能通常是使用基于其他因素和故障数量的比较来衡量,软件的性能也用类似的方法来比较。无论测试的是构成性能的哪一个要素,都要保证测试要素与其他区域的变化隔离开,使最终结果不受影响。若用户需要比较两个系统的CPU速度,举例来说,用户绝不希望因为一个系统拥有了更大的内存或其他特性,而使得它们的比较从一开始就失去了意义。

 

硬件的性能

 

计算机系统中的硬件对于系统运行是相当关键的,因而能够判定何时使用新的硬件能给出现故障的系统带来好处,是系统管理员应具备的基本能力。做出这样的判断和这样的观点有关:目前已有硬件都可能成为潜在的故障源。

Linux文件系统中我们知道了/proc是从内存中直接虚拟出来的,其中的很多文件内容反映了当前系统运行的状态,如cpuinfomeminfointerruptsioports等。

 

CPU周期

 

计算机的中央处理单元(CPU)承担了整个系统的计算负荷。正是CPU执行了电子表格的计算、压缩用于存档的数据、当格式化文件时决定将每个字存放在何处等的操作。因些CPU是系统运行中主要的贡献者,而同时又是故障的潜在源头。

 

虽然CPU的重要性因系统的不同而各异,但对于一台用于创建3D动画或运行多种科学模拟操作的计算来说,它的作用便格外突出了,其他的任务,如文件服务,则更多地受到磁盘或存储器之类分系统的影响。

 

如果用户的计算机使用了不匹配的CPU,显然面临最大的困境将是升级CPU,但也可能还有其他的选择。这就是命名计算机花费较少的CPU周期来执行同样的任务(概括地说,一个CPU周期是CPU时钟的一个基本单位。大部分任务是在固定的CPU周期内完成的)。用户可以通过重新编辑一个程序来激活它运行时使用的周期数量。

我们可以通过下面的命令来查看CPU的基本信息。如芯片类型、主频和cache大小等等。

# cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 15

model           : 1

model name      : Intel(R) Celeron(R) CPU 1.70GHz

stepping        : 3

cpu MHz         : 1700.331

cache size      : 128 KB

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 2

wp              : yes

flags           : fpu vme de pse tsc msr pae mce...

bogomips        : 3394.76

 

 

内存

 

许多程序都是内存工作密集型的,它们会占用大量的内存。 例如高分辨率的绘图软件包、许多数据库和一些科学模拟程序都属于此类程序。若用户的系统中负担了大量的此类程序,拥有充足并且高速的存储器就相当重要了。/proc/meminfo文件中包含了关于内存的情况:

# cat /proc/meminfo

     total:    used:   free: shared: buffers:  cached:

Mem:  517869568 478789632 39079936  0 104275968 256163840

Swap: 1044598784 10625024 1033973760

MemTotal:       505732 kB

MemFree:         38164 kB

MemShared:           0 kB

Buffers:        101832 kB

Cached:         242864 kB

SwapCached:       7296 kB

Active:         300864 kB

ActiveAnon:      22836 kB

ActiveCache:    278028 kB

Inact_dirty:      3764 kB

Inact_laundry:   59488 kB

Inact_clean:      7996 kB

Inact_target:    74420 kB

HighTotal:           0 kB

HighFree:            0 kB

LowTotal:       505732 kB

LowFree:         38164 kB

SwapTotal:     1020116 kB

SwapFree:      1009740 kB

 

 

磁盘性能

 

磁盘子系统,特别是硬盘,是潜在的性能决定因素。许多程序,包括文件服务品、数据库以及软件的开发都要领先快速的磁盘存取。除此之外,交换内存也是驻存在磁盘中的,因为若用户的计算机缺乏足够的内存空间,在内存工作密集型的任务中磁盘的性能但显得很重要了。

通过更换磁盘或使用另一个磁盘作为补充,便可以实现优化磁盘性能的目的。一个更加实惠的替代手段是以各种可能的方法优化磁盘性能,在本章中将有详细讲述。谨慎的分区布局和Linux的磁盘优化方案等均能给性能带来实质性的改进。

 

输入/输出

 

除了磁盘的存取,大量的I/O程序也是相当重要的了。图形硬件对于执行图形密集型的任务来说极为重要。例如在X中显示和移动窗口以及运行游戏等。网络插件I/O对服务器和其他网络操作密集型的任务极其重要的。对于打印类的任务。低级别的串行和并行端口的性能也很重要。

 

在大多情况下,I/O的速度与相关硬件的质量直接相关。硬件的质量是与专为其写的驱动程序的质量相互影响的,举例来说,以往最快的图形处理硬件是由未充分利用插件性的Linux应用驱动器来支持。因而,最新的图形插件在Linux中的运行效果不佳,这种情况至少持续到Free86开发人员研制出已改进的驱动器,这一过程花费了数月的时间。

 

一般来说,特定的驱动器参数可以改进I/O设备的性能,Linux通常在启动时便设定了最佳的参数,但是在具体环境中需要用户调试这些系统设置。

 

我们可以用下面的方法查看一些系统信息:

 

cat /proc/interrupts  - 中断

cat /proc/ioports    - 设备IO端口

cat /proc/meminfo     - 内存信息(i.e. mem used, free, swap size)

cat /proc/partitions  - 所有设备的所有分区

cat /proc/pci        - PCI设备的信息

cat /proc/swaps       - 所有Swap分区的信息

cat /proc/version     - Linux的版本号 相当于 uname -r

uname -a             - 看系统内核等信息

 

 

软件的性能

 

用于评估软件性能的工具通常很贵,也并不常用。软件性能一般以速度衡量,软件速度往往决定于软件的编写者的水平,但是因为用户不能控制它,所以当软件的性能减弱时,便不得不查看硬件和操作系统。通常,用户经常使用的特定程序是查找系统运行故障的线索。

 

响应时间

 

从用户的角度来看,系统处于良好的性能状态是指系统能够快速响应用户的请求,即系统响应时间短。 具体地说,响应时间是指发出请求的时刻到用户的请求的相应结果返回给用户的时间间隔。

 

吞吐量

 

从系统管理员角度来看,系统的吞吐量成为系统处于良好的性能状态的指标。 具体地说,吞吐量是在给定时间段内系统完成的交易数量。即系统的吞吐量越大,说明系统在单位时间内完成的用户或系统请求越多,系统的资源得到充分利用。

 

 

衡量性能

 

用来衡量系统性能的方式有很多,但却没有太多意义,对于Linux

系统来说,一种最好的基准便是,在没有X window参与运行时从命令行开始编译一个特定内核的时间,当比较两个相同的计算机时或是一台得到新配置之前与之后的计算机时,这个基准也同样有效。因为在Linux

系统中内核编译程序执行了除浮点运算外的绝大部分的操作,这种比较会生成极有价值的数据,在较简单的比较形式中更是格外有益。为了产生更佳的效果,用户可以关闭外部的存取,防止用户的读写破坏数据。当然,用户必须使用相同的内核源目录和相同的.config文件以保证用户所进行的比较是在微机与微机之间运行。如果用户的目的是测试系统的内核这样做就已经足够了。

 

举例来说,用户正在编译一个内核,将在1530完成这个进程。在进行了一系列优化之后,用户会发现同样的进程可以在1134完成,这是一个实质性的改进。然而在进行这样的比较时,必须保证有关比较本身内容不被改变。用户必须编译同一源目录中完会相同的源代码。同时,必须保证在进行每个测试编译之前做一个make clean操作。这个命令删除了源代码文件生成的中级目标代码文件。如果用户不想执行make clean操作。可以接下来使用make bzImage命令,简单地重新链接内核而不是像以往一样编译目标文件,不过这将导致速度上的显著差异,因而无法反映用户所做的性能调整真实运行结果。

 

系统瓶颈

 

在计算机的众多资源中,由于系统配置的原因,某种资源成为系统性能的瓶颈是很自然的事情。 当所有用户或系统请求对某种资源的需求超过它的可用数量范围时,我们称这种资源成为瓶颈。

 

当用户注意到一台计算机或者整个系统的速度低于正常水平时,便需要系统管理员来追踪故障了。阻止数据流畅的瓶颈何在,问题是出在网络中,还是在个人电脑的主板上呢?为什么会出现滞后的反映呢?是硬盘、软盘、网络,还是操作系统中的什么问题呢?例如我们可以使用两种工具来判别故障:toptraceroute。在与硬件无关的普通计算机中,这些工具可以搜索到绝大部分故障。如果用户发现不了问题,很可能是由于硬件出现了故障或使用了不恰当的配置。

 

19.2  系统优化的相关命令

 

当针对系统进行性能调优时,了解系统性能分析命令是至关重要的。Linux下有很多与系统性能分析相关的命令,比较常见的有uptimefreetopvmstatps等。下文将介绍这几个较为重要的性能分析命令的使用方法。

 

19.2.1  uptime

 

我们可以使用uptime命令来监视Linux系统性能和状态, 这是一种非常有效的简单方法。uptime命令会显示在一定时间间隔内系统运行队列中进程的信息。通过这些信息可以大致地分析系统的工作负载。所以当系统性能下降时,首先应使用uptime命令来观察系统运行队列中进程的情况。

 

$ uptime

2:07pm up 11 days, 4:54, 9 users, load average: 1.90, 1.98, 2.01

 

在上面显示内容其中有用的信息是三个负载的平均值:1.901.982.01分别是前1分钟、5分钟和15分钟内的负载平均值。

 

系统管理员需要定期运行uptime命令以观察系统的平均负载值及其变化趋势。系统的问题往往通过上述数据反映出来。当系统负载增大时,说明多条命令被阻塞在内存和I/O系统中。这时需要检查系统的有关信息。一般Linux系统,负载为23 表示轻载,56表示中等程度负载,10 以上为过载。不同系统的划分标准是不同的。系统管理员应根据实际情况确定自己系统中划分轻载和过载的界限。

19.2.2  free

 

使用free命令可以查看系统中内存空间的大小。内存是以KB为单位来衡量的。例如用户可以用free命令来获取系统内存空间的大小信息,命令如下:

 

$ free

           Total  used   frdd  shared  buffers  cached

Mem:       95772  86748   9024  54480   5796    36164

-/+ buffers/cache:  44788   50984

Swap:      136512  7000    129512

 

在上面显示内容中,Mem行中的total栏显示了当前Linux正在使用的RAM总量。used栏显示的是被占用的内存空间,但Mem行与这一栏结合并不能产生最好的分析结果,因为其中包含了Linux分配给磁盘缓冲区的一部分分区。在大多数系统中,used栏显示的值和total栏的值相当。然而,我们可以核对used栏、-/+buffers/cache行对应的值来查看有多少内存处于使用状态(used栏、Swap栏对应的数值)。这一部分是作为内存来用的磁盘,而磁盘速度比内存慢,所以最好优先使用物理内存,交换内存则较少使用。

 

19.2.3  top

在本书第三章我们已经介绍过了top 命令,它可以动态实时的察看系统性能,分析CPU、内存的使用资源以及相关进程的信息等。关于top命令的具体的使用方法和命令参数这里就不再谈及了,如果读者还不了解,请参看第三章“ 3.5.6 top 命令”小节的内容。

 

top会显示系统现在的负载情况,如下所示:

# top

2:58pm  up  3:40,  1 user,  load average: 0.00, 0.01, 0.00 

37 processes: 35 sleeping, 2 running, 0 zombie, 0 stopped   

CPU states:  5.6% user,  1.6% system,  0.0% nice, 92.8% idle

Mem:190776K av,183588K used,7188K free,0K shrd, 80180K buff  

Swap: 385520K av,1476K used, 384044K free  65096K cached    

                                                      

PID USER PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM TIME COMMAND

 6 root  10   0     0    0   0   SW   0.5  1.7 0:18   find

 9 root  9   0   1036 1036   860  R    0.3  0.4 0:00   top  

 1 root  8   0   100   84    52  S     0.0  0.0 0:03  init 

 2 root  9   0     0    0      SW    0.0  0.0 0:00 kevent

 3 root  9   0     0    0      SW    0.0  0.0 0:00 kapmd

 5 root  9   0     0    0      SW    0.0  0.0 0:00 kswapd

 7 root  9   0     0    0      SW    0.0  0.0 0:00 bdflus

 8 root  9   0     0    0      SW    0.0  0.0 0:00 kdated

 9 root -1  -20     0    0      SW<   0.0  0.0 0:00 telnet

 

top显示的系统信息包括运行时间、进程的数量和状态、CPU周期的百分比和每个进程占用的存储空间、每个进程运行的时间,以及大量的其它信息。进程是按使用资源的多少来排列的,显示每5秒钟自动更新一次。在显示过程中,也可以按下空格键手动更新显示。在查找并解决系统性能故障时,这些信息是相当有用的。

 

在上面显示的信息中,大家可以看到显示的系统情况,运行中的进程有正在使用的top程序,它使用了0.3%CPU0.4%的存储空间;还有 find 进程使用了0.5%CPU1.7%的存储空间。而其它进程要么处于睡眠状态(S),要么处于睡眠并被换出状态(SW)。

 

19.2.4  vmstat

 

vmstatVirtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

 

vmstat 命令我们也曾在本书第三章简单提及过,现在让我们详细了解一下它。

 

vmstat的语法为: vmstat [-V] [-n] [delay [count]]

 

其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。

 

当我们运行vmstat命令后,显示结果如下:

 

$ vmstat

procs     memory       swap    io   system   cpu     

r b w  swpd free buff  cache si so bi bo  in  cs  us sy  id

0 0 0  1460 7768 79864 65040 0 0 12 10 103  25   0   98

 

 

19.2.5  其他工具

 

除了上面介绍的命令以外,Linux下还有一些其它的系统性能分析工具,比较常见的有sar等。

 

其中iostat工具可以对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。

 

sarSystem Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也较为复杂。

 

sar使用

 

sar命令从多个方面全面地报告系统的活动情况,包括文件的读写情况、系统调用的使用、串口、CPU效率、内存使用状况、进出活动以及IPC有关活动等等,可以帮助人们了解系统资源的使用情况,重点监视内存和CPU的使用。

 

sar命令行的结构:

sar [-P processor_id[, . . . ] | ALL] [-ubdycwaqvtmpgrkAR]  [-o file] t [n]

sar [-P processor_id[, . . . ] | ALL] [-ubdycwaqvtmpgrkAR] [-s time][-e time] [-i sec] [-f file]   

 

sar命令行的说明:

 

第一个命令行中,n t 组合定义采样间隔,t 为采样间隔,n为采样次数。t 应该大于5n 的默认值为1-o file表示将命令执行结果以二进制格式存放在file(文件名)中。

 

第二个命令行中,-s time-e time分别表示报告的起始时间和结束时间。-i sec表示在sec(一个具体数字)秒的间隔选择记录,否则,在数据文件中所有间隔都要报告。当命令行中没有指定采样间隔时,将从-f选项指定的记录文件中抽取数据;如果在这种情况下,也没有-f选项,则从某天的/usr/adm/sa/sadd(dd为日期号)文件中抽取数据。这个文件是标准系统活动日报数据文件。因此,sar命令既可以以实时的方式采样当前系统活动,也可以查看已经过去的某段时间内系统中所发生的活动。

 

可以通过 sar 命令查看系统CPU的使用情况。在任一时刻,CPU的状态或者闲或者忙。在CPU空闲时,有可能是在等待输入、输出,在输入、输出完成后,CPU将继续工作;有可能是CPU没有任务而空闲。在CPU忙时,CPU可以是处在系统模式下,也可以是处在用户模式下。使用 sar -u 命令可以产生有关CPU的报告;使用sar -q 命令可以产生有关进程队列的报告。

 

   1. 使用 sar -u 命令产生的有关CPU的报告所显示内容各项的意义是:

%usr   以百分比的形式报告CPU处在用户模式下的时间。

%sys   以百分比的形式报告CPU处在系统模式下的时间。

%wio   以百分比的形式报告CPU等待输入、输出完成的时间。

%idle  以百分比的形式报告CPU空闲的时间。

%intr  以百分比的形式报告CPU处理中断的时间。

如果%idle的大小持续地低于10,说明CPU空闲的时间少,系统的CPU处理能力相对较低,进程竞争的主要资源不是内存而是CPU

 

2. 使用 sar -q 命令产生的有关进程队列的报告所显示内容各项的意义是:

prunq    处理器处理的在内存中可运行的进程队列的大小。

%prunocc 处理器处理运行队列被占用的时间百分比。

runq-sz  准备运行的进程运行队列。

%runocc  以百分比的形式报告运行队列被占用的时间。

swpq-sz  在交换区中可执行进程的数目。

%swpocc  以百分比的形式报告交换区中的运行队列所占用的时间。

 

如果%runocc大于90,并且runq-sz的值大于2,说明系统的CPU负载相对较重,需要进行调整。

 

  可以从以下几个方面进行检查,判断系统中是否有超常的页面活动:    

1. 使用sar -p 命令产生页面活动报告。如果页面故障vflt/s的值大于100,表示系统中由于有效的页面当前不在内存中,每秒钟进行故障地址转换的数量在100次以上,这将严重影响到系统的运行效率,表明页面活动不正常。

 

2. 使用 sar -w 命令产生的报告中,如果swpin/s 的值大于1,表示每秒从硬盘交换区传送进入内存的次数超过1次,标志着系统中也可能存在着超常的页面活动。

 

3.  使用 sar -u 命令,这条命令可以报告系统中CPU 的使用效率,如果 %sys 的大小持续高于60或者 %wio 的大小相对较高,表示系统中存在的页面活动可能过多。

 

4. 使用 sar -r 命令,这条命令可以报告系统中内存和交换区的使用情况,如果自由 内存 freemen 的值低于100个页面,将严重影响系统的性能。

 

5. 使用 sar -q 命令产生的报告中,如果 %swpocc 大于20,说明系统交换活动过于频繁。

 

系统I/O是数据从内存到外设和从外设到内存,以及外设之间的传输处理。通常情况下,85%的硬盘I/O可以通过使用buffer cache进行处理,buffer cache存在于内存核心的一个区域,但通常只用于系统I/O,它的大小是在系统启动时根据内存大小自动分配的。通过修改核心参数可以改变buffer cache的大小。通常,系统把现有内存中的cache分成两种结构,buffer cache  page cachebuffer cache存放的是数据,page cache存放的是程序,它们都要占用相当数量的核心内存空间。

 

1.使用 sar -b 命令产生的缓存区使用报告所显示的各项意义是:

bread/s   平均每秒从硬盘(或其它块设备)读入系统buffer的物理块数。

lread/s   平均每秒从系统buffer读出的逻辑块数。

%rache    buffer cache中进行逻辑读的百分比。

bwrit/s   平均每秒从系统buffer向硬盘(或其它块设备)所写的物理块数。

lwrit/s   平均每秒写到系统buffer 的逻辑块数。

%wcache   buffer cache 中进行逻辑写的百分比。

pread/s   平均每秒请求进行物理读的次数。

pwrit/s   平均每秒请求进行物理写的次数。

在所报告的各项中,最重要的是%rache%wcache,这两项具体体现了系统buffer的使用效率。如果%rache小于90%%wcache 低于65%,表明系统的I/O活动频繁,系统cache的命中率相对比较低,需要增加buffer cache的大小,优化系统硬盘的读写操作。

 

2.使用 sar -u 命令产生CPU使用情况的报告。报告中的%wio以百分比的形式表示系统CPU等待输入、输出的时间。如果%wio的大小过高,表示系统的CPU花在等待输入、输出上的时间太多,系统的I/O性能较差,可能是由于硬盘产生的问题,也可能是内存太小等原因产生的问题。

 

3.使用 sar -d 命令产生块设备活动的报告所显示的各项的意义是:

device  sar命令正在监视的块设备的名字。

%busy   以百分比的形式表示设备忙时,运行传送请求所占用的时间。

avque   在指定的时间周期内,没有完成的请求的数量的平均值。

r+w/s   每秒传送到设备或从设备传送出的数据量。

blks/s  每秒传送的块数。每块的大小为512KB

avwait  以毫秒为单位,表示传送请求等待队列空闲的平均时间。

avserv  以毫秒为单位,表示完成传送请求所需的平均时间。

使用 sar -d 命令可以进一步判断系统的I/O问题是否是硬盘的I/O性能差的缘故。如果%busyavque的大小相对较高,说明硬盘的传输速度太慢,需要进行调整。

 

如果你的机器有多个CPU处理器,可以使用sar P命令生成指定的一个或多个CPU处理器的活动报告。举例如下:

生成并显示第一个CPU的活动报告:

sar P0

 

生成并显示第二个和第三个CPU的活动报告:

sar P1,2

 

生成并显示第二个和第三个CPU的活动报告,每20秒采样一次,采样10次:

sar P1,2 20 10

 

生成并显示所有CPU的活动报告:

sar P ALL

 

生成并显示第一个CPU发生系统调用的活动报告:

sar c P0

 

19.3  系统优化措施

 

在一个典型的操作系统,比如Linux中,大部分的默认配置被恰当的设定用来为最大范围的安装提供支持。这一部分检测了Linux计算机系统默认设置的一部分,可以通过优化这一系统使之超越默认的设置而获得更佳的性能。其中一部分带来的益处不算大,但对整体性能提高将是很有效的。当然,我们不能断言哪一种方法和优化措施能够给用户的系统带来最大的好处,但还要慎重地提醒大家注意潜在的风险。虽然正如上面介绍的一些命令已列出的信息那样,它们在运行中都是安全的,用户也许还是愿意使用一种不是如此核心的系统来检测这些优化方案。

 

调度优先级

 

在第3Shell命令使用中曾介绍过,nice这种工具允许大家设定进程的优先级。优先级最高的值是-20,最低值是19

 

Nice实用程序允许用户使用一个修改过的调度优先级来运行程序。如果用户不使用nice程序指定一个新的优先级,命令的级别会被自动加上10,从而使它为其他进程让步;也正是因为这样,这个命令得名nice。具有特权的用户才能指定优先级,使一个进程运行得更加迅速。

 

http://www./online/linuxbook/1/19.files/image002.gif 提示:

一些CPU任务密集型的程序具有较低的优先级。例如,SETI@home项目(http://setiathome.ssl.)为每个系统分配了外层空间的radio记录方法,用于搜寻域外的信息(.SETI)。可以很容易的得到SETI@home软件的Linux版本,并在后台运行。很可能对用户来说,自己电脑上的程序的运行比SETI@home软件更加重要,所有可以在低优先级下使用nice来运行SETI@Home软件。这样做可保证SETI@home不会从更重要的进程那进里剥夺更多的CPU时间,而且仍然允许用户参与到项目中。用户可以使用同样的技巧来对待具有低优先级的CPU任务密集型程序。

 

 

Renice实有程序比nice更通用一些。可以把它用在用户上(-u参数),来改变用户全部进程的调度优先级。当把它用于一个进程组上时(-g),所有进程的调度优先级都会被改变。当使用在一个进程上时(-p),这个进程的优先级将被改变。若用户在一个命令中连接这些类型中几类,则必须为每个在一个用户或进程组名之后的进程指定的-p参数。比如,下面的命令提高进程247123和含有因子10根目录的所有进程的调度优先级。

 

$ renice +10 247 u root p 123

 

虚拟内存的优化

 

大家可以使用在/proc/sys/vm/中的文件来调整Linux计算机的虚拟内存。使用cat命令来查看目前的系统设置,然后用echo命令设置新的值。相关的cat命令如下:

$ cat/proc/sys/vm/freepages

64    96   128          

 

这三个数字是当前变量min_free_pages_lowfree_pages_high的系统设置。空闲内存通常不低于min_free_pages的值。若空页数低于free_pages_high的设定值,后台置换被启动。若它低于free_pages_low的设定值,加强置换将被启动。一“页”等于4KB。在一个具有8MB或更多内存的系统中min_free_page引导程序的默认值是n * 2n代表以兆为单位的内存数量。这台设备的free_pages_low设定为n * 3free_pages_high设定为n * 4。具有少于8KB内存的设备中,n的值是8

 

若出现了内存溢出的错误或是设备被主要用于网络操作,把min_free_pages的值增加到64将很有帮助。此时,free_pages_low的值应被设不定期为min_free_pages的两倍。

 

在一个拥有128MB内存和相当低的用户负载的服务器上,“256 512 768”的设置会产生良好的运行结果。如果系统被限定于少量的服务器任务和相当重要的桌面使用,这些设定便有可能是恰当的。当服务器的负载加重,系统似乎停转了,用户便可以试着依照上面的原则来增加设定值。

 

为了调整这些设定,仅需要像下面这样,回送预定的数值并重定向输出到/proc/sys/vm/freepages

 

$ echo256 521 768〃﹥/proc/sys/vm/freepages

 

另一个工具是/proc/sys/vm/overcommit-memory文件,可以通过它实现资源的超值使用。它仅包含一个标志值(0表示关,1表示开)来改变部件的开关。超值使用允许用户使用比实际需要更少的资源来执行操作。我们并不推荐这种方式,因为程序试图使用被告知的可用资源值时,程序或系统将会崩溃。若需要更多内存,请增加用户的物理空间。

/proc/sys/vm/bdflush文件决定了bdflush内核端口监督程序的状态。端口监督程序决定存在的“脏”缓冲区应在何时被写入磁盘。“脏”缓冲是指等待磁盘书写的缓冲区。当内存短缺时,用户可设置“脏”缓冲的最大量,在高速缓冲中,它可达到一个很高的值或bdflush可以一次写到磁盘的“脏”内存的最大值。这使得Linux进行次数更少,但持续时间长的磁盘书写操作。一个较低的值将使磁盘书定的频率和持续时间更加平均。其他的设置用于控制空闲缓冲的分配,并可以被调整到滞系统需求的标准。用户可以/usr/src/linux/Documentationn/vm.txt中了解到更多bdflush的信息。

 

/proc/sys/vm/kswapd文件包括了控制内核交换的系统设置。用户可以控制kswapd一次释放的页数以及kswapd在一次轮转中kswapd写入的页数(一个交换群)。为使kswapd成块的执行I/O操作并且不需时常查询,用户需要对交换组进行合理的设置,但若设定值过高,由于过于冗长的交换,系统将瘫痪。为RedHat设置的默认值将为负载不是很重的服务器工作,但是用户可以尝试一下。

 

/proc/sys/vm/pagetable_cache文件包括两个数值,他们代表每一个处理器高速缓冲器的最大和最小值。在单CPU系统,特别是带有16MB RAM的系统的低速内存中,用户可以把这些值设定为0,从而不会浪费内存空间。在SMP系统中,这些设置可用于使系统进行更快地页表分配且不要求对内核空间加锁。在Red Hat中的默认值设定在2550之间。

 

串行端口的优化

 

Linux系统中串行端口的默认值是非常保守的,因此,有时用户会发现在调制解调器的吞叶量方面(以及升级串行端口性能的所有其他尺度),将出现显著的性能改进。可使用setserial命令来重新设定这些值。Setserial是用来设置和报告特定串行端口配置信息的命令,其中包括I/O端口和IRQ的设置。关于setserial命令的详细用法,请大家尝试试用man命令来学习。

 

若用户已经恰当地设定了串行端口的速度,但它的运行速度仍然很低,这时可以调整数据包的大小以适应于用户的链接质量。若电话线中有大量杂音,那么请选择小一点的软件包。如果线路是高品质的并且没有杂音,便可使用更大的软件包。可应用mrumtu参数把这些值设定到pppd实用程序下。

 

交换分区的设置

  

  尽量把交换分区放在硬盘的开始区域。硬盘的开始区域物理上位于硬盘柱面的外环部分,因此硬盘的每转能在这一部分读写更多的信息。一般的情况下,在运行命令“hdparm –t”时,把交换分区放在硬盘的结尾部,系统的读写速度比放在硬盘的开始部分低。

同时我们可以根据系统的繁忙情况而建立多个交换分区,来增加系统运行的效率。

 

调整IDE硬盘性能

 

在有大量的磁盘 I/O 操作时,设置IDE硬盘使用 DMA 32 位的传送和多重的扇区模式(Multiple sector mode),可以大幅提高系统性能。除非显式的告诉内核使用这些模式,内核缺省是使用保守设置的。

 

使用如下命令,以使PCI总线允许32I/O操作:

 

# /sbin/hdparm -c 1 /dev/hda (hdb, hdc 等等)

 

hdparm(8) 的帮助信息(manpage)中说明了:对于某些芯片需要使用选项“-c 3”。所有的(E)IDE硬盘与接口卡相连的扁平电缆中只用16-bit的连接。

 

使用如下命令,以允许DMA方式:

 

# /sbin/hdparm -d 1 /dev/hda (hdb, hdc 等等)

 

这取决于编译内核时选择的主板芯片组。

 

使用如下命令,以允许多字的DMA模式2传送:

 

# /sbin/hdparm -d 1 -X34 /dev/hda (hdb, hdc 等等)

 

这为较新的(E)IDE/ATA2硬盘设置IDE的传送模式。(参阅硬盘手册,以核实你的硬盘是否支持这种模式)

 

使用如下命令,以允许UltraDMA 模式2

 

# /sbin/hdparm -d 1 -X66 /dev/hda (hdb, hdc 等等)

 

使用该命令之前,事先应该有支持UltraDMA的芯片组,并参看hdparm的帮助信息。使用该命令时,务必小心。

 

使用如下命令,以允许多扇区I/O模式:

 

# /sbin/hdparm -m XX /dev/hda (或hdb, hdc 等等)

 

其中,参数XX是指使用硬盘支持的最大设置。可以使用“-i”选项来自动查找所装硬盘支持的最大设置。可以在输出中查看MaxMultSect的值。例如:

 

# /sbin/hdparm -i /dev/hda (或hdb, hdc 等等)

 

/dev/hda:

Model=Maxtor 7540 AV, FwRev=GA7X4647, SerialNo=L1007YZS

Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>5Mbs FmtGapReq }

RawCHS=1046/16/63, TrkSize=0, SectSize=0, ECCbytes=11

BuffType=3(DualPortCache), BuffSize=32kB, MaxMultSect=8, MultSect=8

DblWordIO=yes, maxPIO=2(fast), DMA=yes, maxDMA=1(medium)

CurCHS=523/32/63, CurSects=379584528, LBA=yes, LBA=yes, LBAsects=1054368

tDMA={min:150,rec:150}, DMA modes: sword0 sword1 *sword2 *mword0

IORDY=on/off, tPIO={min:240,w/IORDY:180}, PIO modes: mode3

 

目前的大多数的硬盘驱动器都支持多扇区模式(Multiple sector mode aka IDE Block Mode),它允许一次中断中传送多个扇区而不是一次中断传送一个扇区。具有这种特性的硬盘驱动器,能使操作系统在硬盘I/O时的负载下降30-50%。在许多系统中,它能提高数据的吞吐率5-50%

 

可以用hdparm的测试模式,来测试所作修改的结果:

 

# /sbin/hdparm -t /dev/hda (hdb, hdc 等等)

 

进行了以上修改后,不要忘记把它们加入到文件“/etc/rc.d/rc.local”中,以便每次重启系统时,能够自动运行。

 

 

分区问题

 

在调整文件系统之前,必须弄清楚分区布局是如何影响它的性能的。硬驱动器是由高速旋转的圆而薄的盘片组成的。与所有的旋转一样,外部边缘必然比内部转动的快。这就意味着硬驱动盘外部的磁道比靠近磁盘中部的磁盘转动得快。对相同的线性数据密度来说,这表示数据将以更快的速度从最外部的磁道上读出和写入。硬驱动器会按照从外到内的顺序把数据写到磁盘上,从而使转动最快的区域首先充满数据。为用户的磁盘分区时,第一个分区会比后面的分区运动得快。一般认为,应把交换区和/tmp区分配在磁盘转动最快的部分,即把它们置于开端部分。当然若是用户的驱动拥有多于1024的柱面,并且用户打算使用高于21.4.2LILO版本,/boot区应被放在最前面的1024字节中。若/boot分区越出了这个界限,此版本的LILO便不能启动系统。

 

Tune2fs

 

Tune2fs实用程序将在很多方面帮助用户调整ext2文件系统。首先,在自动执行文件系统检测之前,用户可以使用-c max-mount-counts参数来调整被装入文件系统的最大数。例如在RedHat7.0中,它的默认值是20。若想设定为30,请这样使用tune2fs:

$ /sbin/tune2fs c 30/dev/hdb3

 

一个相关的参数-I interval-between-checks,它决定了强制执行文件系统检测的最大间隔时间。在RedHat 中的默认值是15552000秒(六个月)。若想设定为9个月,请这样使用tune2fs:

 

$ /sbin/tune2fg/ -i 23318000/dev/hab3

 

在一个极少进行写操作或已装配好的只读文件系统中,也许用户需要提高这些值。这样做在系统执行不必要的文件系统检测时可免去用户的等待时间。在一个需要经常写入的文件系统中,我们建议大家不要增大它们的数值,因为用户总是希望尽可能快地搜索到文件系统中的故障,以避免数据损失。

 

Tune2fg程序可被用于调整那些被保存过以供引导程序使用的文件系统中数据块的数量和文件系统的百分比。在RedHat 中默认为5%。若要设定数据块的数量,可使用跟有数据块数的-r redarved-block命令。

$ /sbin/tune2fg r 50000

 

为设定百分数表示的数据块数量,请使用-m reserved_percentage命令:

$ /sbin/tune2fg m 10

 

在用户装满文件系统时,保存专为引导程序使用的数据块是一种重要的应急措施;这为引导程序提供了修补的机会。它还可以被用于帮助特定的用户或组使用特定的保留数据块,但由于上面提到的一些原因,用户应当尽量少使用它。如果他们在分离的区域/var//etc上,在像/and一样关键的文件系统中,保留数据块是最重要的。在Iomega Zip盘以及软盘之类的盘上,用户也许需要减少保留数据块的百分比,在一个分离的/home区上也一样。

 

http://www./online/linuxbook/1/19.files/image004.gif 注意:

在当前正进行读/写操作的文件系统中,绝不要使用tune2fg来改变它的参数,因为其中一些改变将破坏用户的数据。在改变之前需要首先卸载分区。

 

 

hdparm

 

hdparm实用程序对硬驱动器的参数进行检索和有选择的设定。它可以与1.2.13以及更高的内核版本一起可靠的运行。低于2.0.10版的内核对于其中一些选项不支持。

 

http://www./online/linuxbook/1/19.files/image002.gif 提示:

Hdparm程序是专门被用于IDE硬盘上的;因而没有在SCSI硬盘上使用它的必要。SCSI主机的适配器对SCSI驱动器进行操作,它的驱动器自动使用了最佳的设置。用户还可以按接下来讲的那样测试SCSI硬盘的性能。

 

在承受了大量I/O任务的磁盘上,通过设定IDE驱动器来使用直接存储器存取(DMA)和32字节的传输,已有结果显示:这样做可使系统性能大幅度提高。默认的内核设定值保留了一些用于调整的空间。下面的命令将第一个IDE盘的PCI总线指定为32I/O

 

$ /sibn/hdparm d 1 /dev/had

 

DMA将数据从硬驱动器直接传送到内存,而不需经过CPU。为使用DMA,对主板芯片提供的支持必须被编入内核。要关闭DMA,就要使用-d 0参数。一些驱动器只有DMA的低级设备,他们会导致文件系统的崩溃。如果发现了重复出现的故障,请试着关闭DMA

 

$ /sbin/hdparm t /dev/hda

 

用户得到的结果可能是这样的:

 

/dev/hda:

Timing buffered disk reads:64 MB in 5.81 seconds = 12.36 MB/sec

 

调整并运行hdparm来测试命令直到最佳的设置。若用户想要使变化结果恒定不变,请这样使用hdparm-k参数:

 

$ /sbin/hdparm k 1 /dev/hda

 

通过设定-m参数来改变每次中断时传输的区段数,可以实现一不定期的性能优化,但使用这个参数时,我们未发现实际上的变化。

Mke2fs

 

Mke2fs命令在一个磁盘分区上创建ext2文件系统。若用户的Linux设备需经常处理大量的文件,通过格式化磁盘,便能使用户的系统获得显著的性能改理。通过设定默认值,文件系统使用的是1024字节的数据块。若打算对大于十亿字节的文件进行操作,可以尝试使用mke2fg命令将数据块的大小改为4K

 

$ mke2fs b 4096 /dev/hda3

 

http://www./online/linuxbook/1/19.files/image004.gif 注意:

mke2fs命令将在特定的分区上创建一个新的文件系统。这一操作将破坏那一区域上的所有数据,因此切勿在非空分区上使用它

 

defrag

 

对磁盘写入一个文件时,它不能总是被存放在连续的块上,这时我们称文件被碎化了。在读取这样的文件时,磁盘读写磁头必须进行更多的转动,因此将花费更长的时间。即使拥有了良好读写能力的高速缓冲区可使这一问题显得不是那么严重,用户还是希望避免出现磁盘碎化。幸好ext2文件系统在处理数据块大小上非常谨慎,从而达到使碎片区最小化的目的。

 

Debian版本带有defrag程序,此程序以GNU GPLlicense发布,用来方便用户使用。

 

chattr

 

Linux跟踪最近一次的文件修改并且更新时间信息。这一过程涉及到findfsck命令的使用,并且对于那些包含大量持续变化数据(如newsfeedmail server)的文件系统来说,它是资源使用密集型的。为了保存有关的时间和资源,作为高级用户必须使用chattr命令取消最近一次存取时间的修改。

 

$ chattr +A filenaem

 

Chattr命令可被重复使用。在/var/spool/mail目录下跳过最近一次存取时间修改的命令发下:

 

$ chattr R +A /var/spool/mail

 

通常况下我们不使用这一技术,因为了解文件在何时进行了最近一次读取操作是很有益的。

 

坏块

 

定期检测硬驱动器上的坏块是很明智的做法。为了定位和修改文件系统中的坏块,可使用三个命令:dumpe2fgbadblockse2fsck。首先用户必须确定打算对其进行检查的设备中有多少数据块,为此可使用RedHat e2fsprogs数据包中的dumpe2fs命令。正如它的dumpe2fg命令将从特定设备的superblock和数据块组中清除文件系统的信息。这些信息包括:OS的类型、索引节点计数、数据块计数、上次计数的时间、安装计数、上次检测过的数、测试时间间隔、第一个索引结点、索引节点数等。例如在/dev/hda3分区上清除数据的命令如下:

 

$ /sbin/dumpe2fs /dev/hda3

 

因为在定位坏块时需要得到数据块的数量,必须将这一命令导入grep命令中;

 

$ /sbin/dumpe2fs /dev/hda3 | grepBlock  count

Dump2fg 1.19,13-Jul-2000 for EXT2 FS 0.5b,95/08/09

Block.count:     533736

 

得到了分区上数据块的总数,接下来便可使用badblocks程序。为了检查/dev/hda3设备(共包含533736个块),从第一块开始并且输出结果到一个叫做badblcok.rpt的文件中,应进行如下操作:

 

$ badblocks o badblcoks.rpt /dev/hda3 533736 1

 

http://www./online/linuxbook/1/19.files/image004.gif 注意:

请勿使用-w来处理包含真实数据的文件系统,因为这一参数指定badblocks命令对设备上的每个数据块进行写操作。会覆盖所有分区上已有数据。而-n参数执行的是非破坏性读/写测试,对每个数据块写入测试数据之后将恢复原始数据。

 

既然用户已经检测了磁盘的坏块,便可给文件系统一个机会来修复它们,请使用/sbin/fsck.ext2(或同样效果的/sbin/e2fsck)命令。当被输入带有坏块的输出文件标志时,e2fsck将把所有数据从有问题的数据块传送到正常的数据块中。运行时,e2fsck通过文件系统显示五个过程,其中包括了它遇到的所有故障:

 

$ e2fsck f -1 badbloocks.rpt /dev/hda7

e2fsck 1.19,13-Jul-2000 for EXT2 FS 0.5b, 95/08/09

pass 1:checking inodes,blocks,and sizes

pass 2:checking directory structure

setting filetype for entry `pump.sock`in /var/run(3016) to 6.

Pass 3: checking directory connectivity

Pass4:checking reference counts

Pass5:checking group summary information

/:*****FILE SYSTEM WAS MODIFIED *****

/:96133/165792 files(0.6% non-contiguous),300086/331332

 blocks

 

在以上的例子中,e2fsck发现了文件/var/run/temp/.font-unix中出现的局部问题。这一程序已经自动纠正了故障。e2fsck极少会要求用户参与故障的解决。若需要的话,除非用户对e2fsck文件系统极为熟悉,最好的选择就是为每一项都设定默认值。

 

进程优化

 

本书前面介绍ps命令的内容中提到过在运行一个系统时遗留下多余的进程将成为保证系统安全性的极大隐患。仅仅由于这一原因,就必须对系统进行调整以使它们不会自动产生。另一个原因在于:在用户设备上运行的任何进程都要占用内存和CPU周期。换句话说,它们会浪费必要进程所需的资源。

 

那么,怎样判断哪些进程是多余的呢?用户需要对一个系统的硬件和软件设置和它的应用需求有十分清楚的认识。显然,一些进程是多余的。比如说,若没有恰当的理由,kwmaudio便是一个多余而且应被清除的进程,若用户的系统不属于域名服务器,named进程便也是无用的。请使用基本的常识来消除那些不会被使用的进程。用户可以用ps x命令查找到哪一些进程正参与运行。

$ ps -x

PID  TTY      STAT      TIME COMMAND

     1 ?        S       0:26 init

     2 ?       SW       0:04 [kflushd]

     3 ?       SW       0:16 [kupdate

     4 ?       SW       0:00 [dpiod]

     5 ?       SW       0:07 [kswapd]

     448 ?      S       0:02 syslogd

     451 ?      S       0:00 klogd

     460 ?      S       0:46 named

     464 ?      S       0:00 rpc.portmap

     483 ?      SL      0:01 xntpd p /var/xntpd.pid

    output truncated

 

以上的输出显示会持续一段时间,因此应将它输送到相应大小的页面调度程序中或是送到文件中,这样用户便可以在文件编辑器中查阅它们。在进程列表中,用户可以找到哪些进程是多余的。若是一些多余进程从开机时自动生成了,就必须按第8章中所讲得那样,找到启动脚本然后清除它。

 

 

优化内核

 

一般来说,在不重新编译特定内核情况下,运行任何版本的默认内核都是不恰当的方案。库存内核包含了大量的驱动程序,方便在具有不同配置设备上的安装。但也许用户并不需要许多的此类驱动程序。举例来说,大多数安装不会用到对Symmetric Multi-Processihng(SMP)Integrated Services Digital Network的支持。安装之后,用户应尽早地重新编译内核,清除为不存在的硬件提供的驱动程序,然后消除毫无用处的功能。

 

需要进行重新编译的另一个理由是,事实上目前存在的内核已为基于处理器的优化问题作了考虑,但大多版本装载了为386系统而进行优化的内核。在一台更高效的设备上,为386设备开发的内核将比专为此设备编译的程序运行得慢。如果必须具有在大量设备之间的可移植性,那么必须为最低效的设备处理器进行编译,但除此之外,还需为计算机选择恰当的处理器类型。

 

可用于处理器优化的方法正在增加,对于以往的2.2.5内核,有五种优化方案。表19_1列出了在2.2.17内核中可选择的优化方案,表19_2则列出了2.4.0-test9内核的优化方案。(可以在2.2.x内核上使用内核修补程序来提高优化的质量:但这一做法通常不是很有效)。

 

19_1 2.2.17内核中的优化方案

                                                    

优化方案             处理器

                                                   

 

386                                                                          AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SXCyrix/TI    486DLC/DLC2UMC 486SX-S

 

486                                                                          AMD/Cyrix/IBM/Intel DX4486DX/DX2/SL/SX/SX2

AMD/Cyrix 5x86NexGen Nx586UMC U5DU5S

 

586/K5/5x86/6x86         一般Pentium类型的CPU,可能缺少TSCtime stamp counter时间戳计数器)寄存器

 

Pentium/K6/TSC          Intel Pentium/Pentium MMXAMD K6K6-3D

 

Ppro                    Inter Pentium II/Pentium ProCyrix/IBM/National

                        Semiconductor 6x86MXMII

                                                                       

 

 

 

 

19_2 2.4.0-test9内核中的优化方案

                                                                           

优化方案                 处理器

                                                                           

386                                                                      r所有的IntelAMDCyrix 386处理器,和Cyrix486DLC系列和NexGen Nx586

486                                                                      所有的IntelAMDCyrix 486处理器,和UMC U5DUSS

586/K5/5x86/6x86MX     一般Pentium类型的CPU,可能缺少TSCtime stamp couter

时间戳计数器)寄存器

Pentium类型            原来的Intel Pentium

Pentium MMX            Intel Pentium MMX

Pentium-Pro/II/Celeron Intel Pentium-ProCeleronPentium II

Pentium III            Intel Pentium-III

K6/ K6-II K6-III       AMD K6K6-2K6-III

Athlon/K7              AMD Athlon(K7),包括Duron

Crusoe                 Transmeta Crusoe系列

winchip-C6             原来的IDT Winchip

winchip-2              IDT Winchip 2

winchip-2S/Winchip-3   3dNow能力的IDT Winchip

                                                                              

 

另外,当编译新内核时,内存空间的大小也是一个因素。若用户的系统有高于1KM内存的保证,需要开启Big Memory Support。当进行改进时,可以选择2GB的最大内存而不是默认的1GB来实现。

 

针对某一特定CPU还可使用许多其它的内存参数来实现性能优化。因为这些参数是针对特定CPU的,我们请大家来评估它们对系统的潜在益处。

 

 

优化X Window系统

 

本书第20章中将给大家详细介绍X Window系统,它为用户提供了一个GUI环境。用户总是愿意使用图形化的工具,而且一些Linux的管理功能是如此复杂,没有图形工具协助运行,一些性能很容易被遗忘。拿网络配置来说,几乎无一例外,都是通过使用netcfgkppp之类的工具来实现。当然也可能通过编辑脚本对网络进行配置,但使用这一方式的网络管理员越来越少了,因此,在用户管理之下的大多数平台系统和许多的服务器会被编译从而方便X Window的运行。X是属于资源使用密集型的。任何可以调整X Window的步骤都是有益的。

 

窗口管理程序和综合平台环境

 

窗口管理程序和综合平台环境(IDEs)是相当消耗内存空间和CPU周期的。因为即使经验丰富的系统管理员也容易对它产生混淆,首先需要弄清两者的差别,窗口管理程序是X Window和用户之间的交界面。正是通过这种机制,使用者才能对X提供的窗口进行移动,改变大小的操作。一些窗口管理程序带有任务栏、虚拟平台、文件管理程序以及联合主题;另外一些窗口管理程序则没有。综合平台环境实现了一些交互应用软件的互相兼容和其它的环境操作。它提供了文件浏览器(browser)之类的工具和用户平台,还带有辅助的小型工具和实用程序,并可影响环境的整体外观和感觉。每个IDE都有特定的窗口,但如果管理程序是IDE-aware型的,便可以被不同的窗口管理程序使用。我们将在第20章中详细地讨论具体细节,并从更深层次上讲解X Window,但是最基本的是IDE是在窗口管理程序之上运行的。

 

如果用户需要减少系统开销,可以避免使用IDE,这样可释放大量资源。如果使用了IDE,但未获得用户需要的性能(可是仍需要X环境),那么请转变一下用户所使用的窗口管理程序。若用户所寻求的是高性能而不是“数量”,可使用tab窗口管理程序(twm)。这一环境提供了标题栏、图标管理、“指向并点击”以其他功能,但它使用的是艺术线条而不是高开销的3D效果或明暗处理。切换到twm将是用户的系统性能有显著提高。

 

XF86Cconfig中清除不良模式

 

有关X Window性能的另一个问题涉及到启动过程,虽然它比微软的窗口启动得快,却比实际应该达到的速度慢得多。怎样才能使它更快地启动呢?如果用户注意了startx命令的输出结果(按Ctrl+Alt+F1返回查看),会发现与如下的几行相似的结果:

 

  --) SVGA: NM2160: Removing mode(640x400)that won`t display

properly on LCD

 

    这一行表示可见和已定的图像模式不在显示卡和监视器组合的图像模式范围内,每当 X Windows 启动时,系统会为这些模式重新赋值。其中一种提速方法是从XF86Config文件中清除所有不良的图像模式。模式行是这样的:

 

(--) SVGA: NM2160: Removing mode(640x400)that won`t display 

-hsync -vsync

 

请在Modeline一词之前标注一个“#”。下一次X启动时,便不会再次尝试使用这些模式,因而省去了使用已删除模式的时间。然而,一旦X开始运行,这种方法便不能提高性能了。

 

升级

 

何时升级操作系统是一个令许多系统管理员感到困惑的问题。用户会仅仅因为出现了一个新版本就进行升级吗?每出现一个有故障的安装时,用户都会升级专用数据包吗?用户会从擦除操作开始重新安装还是直接运行升级版本呢?

 

最好的做法是备份系统,重新安装,然后转存配置文件和用户文件。起初这样做让用户感到不安,因为用户无法确定是否已经将所有的配置数据写回,也许用户觉得自己忽略了什么。若使用了安装的升级程序,便不会出现问题。然而当用户更有自信时,并且不希望以往版本的残余项混入新版本中,那么请开始备份系统,进行一次完全安装。

 

请不要仅仅因为新操作系统的问世而盲目的升级或安装一个可以良好运行并已配置好的系统。在新版本的网站上会提供详细的文档来说明在哪些方面改进和升级了版本。请阅读这些说明并做一个效益分析。获得这一版本有时间上的优势吗?如果不升级会有隐患吗?而这些隐患会出现在用户的设备中吗?如果新版本提供了许多重要的安全性调整或是在整个内核的基本原理上有明显改变的话,便应当进行升级。如果仅有少量的安全性调整,用户可以只升级数据包。当用户有进步时,便能更加轻松地掌握哪些系统需要升级。

 

19.4  本章小结

 

我们在使用Linux 系统的过程中,随着环境和主要使用目的的变化,如果不能完全发挥其潜力,就需要对系统进行调整以适应新的需求。一台计算机的性能是受多方面因素影响的,包括硬件和软件的因素。若系统并未像用户期望的那样运行,用户可以升级硬件,但花费一些时间来优化计算机,可以大大节省升级硬件的费用。

 

作为一名优秀的系统管理员,其主要任务之一就是不停地监控和调整系统的整体性能,这是一项比较复杂的工作,往往涉及到系统的硬件,操作系统及主要业务应用程序等方面。如果读者希望精通这门系统优化的技术,则需要大家好好掌握本章的内容。

19.5  专家答疑

1、如何调整虚拟控制台而达到节省内存空间。

答:

大部分Linux的发行套件都建立六个虚拟控制台,实际上三个已经足够,并且可以节省可贵的内存空间。编辑/etc/inittab文件,在下面三行的前面加上# 

 

4:2345:respawn:/sbin/mingetty tty4 

5:2345:respawn:/sbin/mingetty tty5 

6:2345:respawn:/sbin/mingetty tty6 

 

然后执行init q,使系统重新读取/etc/inittab文件,关闭tty4tty5tty6虚拟控制台。

 

 

19.6  课堂练习

1、如何调整系统虚拟内存。

2、如何察看cpu具体的是使用情况。

3、如何进行文件系统优化。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多