当前位置:文档之家 > Red Hat Enterprise Linux在IBM xSeries服务器上的调优

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

适用机型:

所有服务器

文档内容:

一.理解Linux的性能

我们可以在文章的开始就列出一个列表,列出可能影响Linux操作系统性能的一些调优参数,但这样做其实并没有什么价值。因为性能调优是一个非常困难的任务,它要求对硬件、操作系统、和应用都有着相当深入的了解。如果性能调优非常简单的话,那些我们要列出的调优参数早就写入硬件的微码或者操作系统中了,我们就没有必要再继续读这篇文章了。正如下图所示,服务器的性能受到很多因素的影响。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

当面对一个使用单独IDE硬盘的有20000用户的数据库服务器时,即使我们使用数周时间去调整I/O子系统也是徒劳无功的,通常一个新的驱动或者应用程序的一个更新却可以使这个服务器的性能得到明显的提升。正如我们前面提到的,不要忘记系统的性能是受多方面因素影响的。理解操作系统管理系统资源的方法将帮助我们在面对问题时更好的判断应该对哪个子系统进行调整。

下面的部分对Linux操作系统的架构进行了简单的介绍,对Linux内核的完整的分析超出了我们这本红皮书的内容,感兴趣的读者可以寻找相关文档做更深入的研究。本书对Linux性能的调整主要针对Red Hat发行版本。

1.Linux的CPU调度

任何计算机的基本功能都十分简单,那就是计算。为了实现计算的功能就必须有一个方法去管理计算资源、处理器和计算任务(也被叫做线程或者进程)。非常感谢Ingo Molnar,他为Linux内核带来了O(1)CPU调度器,区别于旧有的O(n)调度器,新的调度器是动态的,可以支持负载均衡,并以恒定的速度进行操作。

新调度器的可扩展性非常好,无论进程数量或者处理器数量,并且调度器本身的系统开销更少。新调取器的算法使用两个优先级队列。

·活动运行队列

·过期运行队列

调度器的一个重要目标是根据优先级权限有效地为进程分配CPU 时间片,当分配完成后它被列在CPU的运行队列中,除了CPU 的运行队列之外,还有一个过期运行队列。当活动运行队列中的一个任务用光自己的时间片之后,它就被移动到过期运行队列中。在移动过程中,会对其时间片重新进行计算。如果活动运行队列中已经没有某个给定优先级的任务了,那么指向活动运行队列和过期运行队列的指针就会交换,这样就可以让过期优先级列表变成活动优先级的列表。通常交互式进程(相对与实时进程而言)都有一个较高的优先级,它占有更长的时间片,比低优先级的进程获得更多的计算时间,但通过调度器自身的调整并不会使低优先级的进程完全被饿死。新调度器的优势是显著的改变Linux内核的可扩展性,使新内核可以更好的处理一些有大量进程、大量处理器组成的企业级应用。新的O(1)调度器包含仔2.6内核中,但是也向下兼容2.4内核。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

新调度器另外一个重要的优势是体现在对NUMA(non-uniform memory architecture)和SMP(symmetric multithreading processors)的支持上,例如INTEL@的超线程技术。

改进的NUMA支持保证了负载均衡不会发生在CECs或者NUMA节点之间,除非发生一个节点的超出负载限度。Linux的CPU调度器没有使用大部分UNIX和Windows 操作系统使用的进程-线程模式,它只使用了线程。在Linux中一个进程表示为一组线程,可以用线程组ID或者TDGID代替标准UNIX中的进程ID或者PID。然而大多数Linux命令例如ps和top都使用PIDs表达,因此在下面的文章中我们会经常使用进程和线程组。

2.Linux的内存架构

今天我们面对选择32位操作系统还是64位操作系统的情况。对企业级用户它们之间最大的区别是64位操作系统可以支持大于4GB的内存寻址。从性能角度来讲,我们需要了解32位和64位操作系统都是如何进行物理内存和虚拟内存的映射的。

在下面图示中我们可以看到64位和32位Linux内核在寻址上有着显著的不同。探究物理内存到虚拟内存的映射超出了本文研究的范围,因此这里我们只是着重研究一下Linux内存架构的特点。

在32位架构中,比如IA-32,Linux内核可以直接寻址的范围只有物理内存的第一个GB(如果去掉保留部分还剩下896MB),访问内存必须被映射到这小于1GB的所谓ZONE_NORMAL空间中,这个操作是由应用程序完成的。但是分配在ZONE_HIGHMEM中的内存页将导致性能的降低。

在另一方面,64位架构比如x86-64(也称作EM64T或者AMD64)。ZONE_NORMAL空间将扩展到64GB或者128GB(实际上可以更多,但是这个数值受到操作系统本身支持内存容量的限制)。正如我们看到的,使用64位操作系统我们排除了因ZONE_HIGHMEM部分内存对性能的影响的情况。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

3.虚拟内存管理

因为操作系统将内存都映射为虚拟内存,所以操作系统的物理内存结构对用户和应用来说通常都是不可见的。如果想要理解Linux系统内存的调优,我们必须了解Linux 的虚拟内存机制。应用程序并不分配物理内存,而是向Linux内核请求一部分映射为虚拟内存的内存空间。如下图所示虚拟内存并不一定是映射物理内存中的空间,如果应用程序有一个大容量的请求,也可能会被映射到在磁盘子系统中的swap空间中。

另外要提到的是,通常应用程序不直接将数据写到磁盘子系统中,而是写入缓存和缓冲区中。Bdflush守护进程将定时将缓存或者缓冲区中的数据写到硬盘上。

Linux内核处理数据写入磁盘子系统和管理磁盘缓存是紧密联系在一起的。相对于其他的操作系统都是在内存中分配指定的一部分作为磁盘缓存,Linux处理内存更加有效,默认情况下虚拟内存管理器分配所有可用内存空间作为磁盘缓存,这就是为什么有时我们观察一个配置有数G内存的Linux系统可用内存只有20MB的原因。

同时Linux使用swap空间的机制也是相当高效率的,如下图所示虚拟内存空间是由物理内存和磁盘子系统中的swap空间共同组成的。如果虚拟内存管理器发现一个已经分配完成的内存分页已经长时间没有被调用,它将把这部分内存分页移到swap空间中。经常我们会发现一些守护进程,比如getty,会随系统启动但是却很少会被应用到。这时为了释放昂贵的主内存资源,系统会将这部分内存分页移动到swap空间中。上述就是Linux使用swap空间的机制,当swap分区使用超过50%时,并不意味着物理内存的使用已经达到瓶颈了,swap空间只是Linux内核更好的使用系统资源的一种方法。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

4.模块化的I/O调度器

就象我们知道的Linux2.6内核为我们带来了很多新的特性,这其中就包括了新的I/O调度机制。旧的2.4内核使用一个单一的I/O调度器,2.6内核为我们提供了四个可选择的I/O调度器。因为Linux系统应用在很广阔的范围里,不同的应用对I/O设备和负载的要求都不相同,例如一个笔记本电脑和一个10000用户的数据库服务器对I/O的要求肯定有着很大的区别。

(1).Anticipatory

anticipatory I/O调度器创建假设一个块设备只有一个物理的查找磁头(例如一个单独的SATA硬盘),正如anticipatory调度器名字一样,anticipatory调度器使用“anticipatory”的算法写入硬盘一个比较大的数据流代替写入多个随机的小的数据流,这样有可能导致写I/O操作的一些延时。这个调度器适用于通常的一些应用,比如大部分的个人电脑。

(2).Complete Fair Queuing (CFQ)

Complete Fair Queuing(CFQ)调度器是Red Hat Enterprise Linux使用的标准算法。CFQ调度器使用QoS策略为系统内的所有任务分配相同的带宽。CFQ调度器适用于有大量计算进程的多用户系统。它试图避免进程被饿死和实现了比较低的延迟。

(3).Deadline

deadline调度器是使用deadline算法的轮询的调度器,提供对I/O子系统接近实时的操作,deadline调度器提供了很小的延迟和维持一个很好的磁盘吞吐量。如果使用deadline算法请确保进程资源分配不会出现问题。

(4).NOOP

NOOP调度器是一个简化的调度程序它只作最基本的合并与排序。与桌面系统的关系不是很大,主要用在一些特殊的软件与硬件环境下,这些软件与硬件一般都拥有自己的调度机制对内核支持的要求很小,这很适合一些嵌入式系统环境。作为桌面用户我们一般不会选择它。

5.网络子系统

新的网络中断缓和(NAPI)对网络子系统带来了改变,提高了大流量网络的性能。Linux内核在处理网络堆栈时,相比降低系统占用率和高吞吐量更关注可靠性和低延迟。所以在某些情况下,Linux建立一个防火墙或者文件、打印、数据库等企业级应用的性能可能会低于相同配置的Windows服务器。

在传统的处理网络封包的方式中,如下图蓝色箭头所描述的,一个以太网封包到达网卡接口后,如果MAC地址相符合会被送到网卡的缓冲区中。网卡然后将封包移到操作系统内核的网络缓冲区中并且对CPU发出一个硬中断,CPU会处理这个封包到相应的网络堆栈中,可能是一个TCP端口或者Apache应用中。

这是一个处理网络封包的简单的流程,但从中我们可以看到这个处理方式的缺点。正如我们看到的,每次适合网络封包到达网络接口都将对CPU发出一个硬中断信号,中断CPU正在处理的其他任务,导致切换动作和对CPU缓存的操作。你可能认为当只有少量的网络封包到达网卡的情况下这并不是个问题,但是千兆网络和现代的应用将带来每秒钟成千上万的网络数据,这就有可能对性能造成不良的影响。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

正是因为这个情况,NAPI在处理网络通讯的时候引入了计数机制。对第一个封包,NAPI以传统的方式进行处理,但是对后面的封包,网卡引入了POLL的轮询机制:如果一个封包在网卡DMA环的缓存中,就不再为这个封包申请新的中断,直到最后一个封包被处理或者缓冲区被耗尽。这样就有效的减少了因为过多的中断CPU对系统性能的影响。同时,NAPI通过创建可以被多处理器执行的软中断改善了系统的可扩展性。NAPI将为大量的企业级多处理器平台带来帮助,它要求一个启用NAPI的驱动程序。在今天很多驱动程序默认没有启用NAPI,这就为我们调优网络子系统的性能提供了更广阔的空间。

6.Linux文件系统

Linux作为一个开源操作系统的优势之一就是为用户提供了多种操作系统的支持。现代Linux内核几乎可以支持所有计算机系统常用的文件系统,从基本的FAT到高性能的文件系统例如JFS。因为Red Hat Enterprise Linux主要支持两种文件系统(ext2和ext3),我们将主要介绍它们的特点,对其他Linux文件系统我们仅做简要介绍。(1)ext2

ext2文件系统是ext3文件系统的前身。是一个快速、简便的文件系统,它与目前大部分文件系统的显著不同就是ext2不支持日志。

(2)ext3,Red Hat默认的文件系统

自从Red Hat 7.2开始,安装默认的文件系统就是ext3。Ext3是应用广泛的ext2文件系统的更新版本,它加入了对日志的支持。下面列举了这个文件系统的一些特性。·可用性:ext3可以保证数据写入磁盘的一致性,万一出现了非正常的关机(电源的失效或者系统的崩溃),服务器不需要花费时间去校验数据的一致性,因此极大的减少了系统恢复的时间。

·数据完整性:加入特殊的日志功能,所有数据,包括文件数据和元数据都是有日志记录的。

·速度:通过data=writeback参数,你可以根据应用的需要来调整数据的写入速度。

·灵活性:从ext2转换到ext3文件系统是非常简单的并且不需要重新格式化硬盘。通过执行tune2fs命令和编辑/etc/fstab文件,你可以非常容易的将ext2文件系统更新到ext3文件系统。Ext3文件系统也可以禁用日志后作为ext2使用。利用一些第三方的工具软件可以更灵活的使用ext3文件系统,比如PartitionMagic可以编辑ext3分区。

(3)ReiserFS

ReiserFS是一个快速的日志文件系统,它优化了磁盘空间的使用、加快了故障恢复速度。今天ReiserFS是SUSE Linux默认的文件系统。

(4)JFS

JFS是一个完全64位的文件系统,它可以支持非常大的文件和分区。JFS是由IBM为AIX系统开发的,现在在GPL license下以及可以使用了。JFS对大容量的分区和文件,尤其是HPC和数据库应用来说是一种理想的操作系统。如果你想了解更多关于JFS的信息,请访问下面链接

http://www.doczj.com/doc/39629789a0116c175f0e48b9.html

(5)XFS

XFS是SGI为IRIX系统开发的高性能的日志文件系统。它的特点和应用都和JFS相当接近。

7.Proc文件系统

proc文件系统不是一个实时文件系统,但是它的作用却非常大。它提供了一个运行中的内核的接口,并不存储实际的数据。Proc文件系统使系统管理员可以监控和调整内核运行状态。下图描述了一个proc文件系统的示例,大部分Linux性能调优工具都需要借助proc文件系统的信息来进行工作。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

在proc文件系统中,我们可以看到分别记录不同信息的多个子目录,但是proc目录下的大部分文件可读性都不是很强,建议最好使用可读性更强的工具例如vmstat等

来查看proc中记录的信息。请牢记proc目录的相应目录结构。

·在/proc目录下的文件

proc根目录下保存着一些记录了系统信息的文件,这些文件你可以通过vmstat和cpuinfo等工具来读取。

·数字1到X

各个以数字为名称的文件夹,代表的是运行进程的PID。例如,目录1记录了init进程的一些统计信息。

·acpiapci是一个现代桌面和笔记本电脑的电源配置和管理接口,因为apci主要是一个个人电脑的技术,所以在一些服务器系统上经常被禁用。可以访问下面链接获得更多acpi的相关信息

http://www.doczj.com/doc/39629789a0116c175f0e48b9.html

·bus

这个子目录记录了系统的总线子系统的信息,例如pci总线或者usb接口。

·irq

irq子目录下记录了系统的中断信息。

·net

net子目录记录了一些关于你的网卡的重要信息,比如接收的多点广播封包或者每个网卡的路由。

·scsi

scsi子目录包含了关于系统的scsi子系统的信息,例如连接的设备或者驱动的版本。ips子目录是记录关于IBM ServerRAID阵列卡信息的。

·sys

sys目录下包含了一些可以调整的内核参数。

·tty

tty子目录包含了系统虚拟终端的信息。

8.理解Linux调优参数

在我们介绍Linux系统的各种调优参数和性能监测工具之前,需要先讨论一些关于性能调优的参数。因为Linux是一个开源操作系统,所以又大量可用的性能监测工具。对这些工具的选择取决于你的个人喜好和对数据细节的要求。所有的性能监测工具都是按照同样的规则来工作的,所以无论你使用哪种监测工具都需要理解这些参数。下面列出了一些重要的参数,有效的理解它们是很有用处的。

(1)处理器参数

·CPU utilization

这是一个很简单的参数,它直观的描述了每个CPU的利用率。在xSeries架构中,如果CPU的利用率长时间的超过80%,就可能是出现了处理器的瓶颈。·Runable processes

这个值描述了正在准备被执行的进程,在一个持续时间里这个值不应该超过物理CPU数量的10倍,否则CPU方面就可能存在瓶颈。

·Blocked

描述了那些因为等待I/O操作结束而不能被执行的进程,Blocked可能指出你正面临I/O瓶颈。

·User time

描述了处理用户进程的百分比,包括nice time。如果User time的值很高,说明系统性能用在处理实际的工作。

·System time

描述了CPU花费在处理内核操作包括IRQ和软件中断上面的百分比。如果system time很高说明系统可能存在网络或者驱动堆栈方面的瓶颈。一个系统通常只花费很少的时间去处理内核的操作。

·Idle time

描述了CPU空闲的百分比。

·Nice time

描述了CPU花费在处理re-nicing进程的百分比。

·Context switch

系统中线程之间进行交换的数量。

·Waiting

CPU花费在等待I/O操作上的总时间,与blocked相似,一个系统不应该花费太多的时间在等待I/O操作上,否则你应该进一步检测I/O子系统是否存在瓶颈。·Interrupts

Interrupts值包括硬Interrupts和软Interrupts,硬Interrupts会对系统性能带来更多的不利影响。高的Interrupts值指出系统可能存在一个软件的瓶颈,可能是内核或者驱动程序。注意Interrupts值中包括CPU时钟导致的中断(现代的xServer系统每秒1000个Interrupts值)。

(2)内存参数

·Free memory

相比其他操作系统,Linux空闲内存的值不应该做为一个性能参考的重要指标,因为就像我们之前提到过的,Linux内核会分配大量没有被使用的内存作为文件系统的缓存,所以这个值通常都比较小。

·Swap usage

这个值描述了已经被使用的swap空间。Swap usage只表示了Linux管理内存的有效性。对识别内存瓶颈来说,Swap In/Out才是一个比较又意义的依据,如果Swap In/Out的值长期保持在每秒200到300个页面通常就表示系统可能存在内存的瓶颈。

·Buffer and cache

这个值描述了为文件系统和块设备分配的缓存。注意在Red Hat Enterprise Linux 3和更早一些的版本中,大部分空闲内存会被分配作为缓存使用。在Red Hat Enterprise Linux 4以后的版本中,你可以通过修改/proc/sys/vm中的page_cache_tuning来调整空闲内存中作为缓存的数量。

·Slabs

描述了内核使用的内存空间,注意内核的页面是不能被交换到磁盘上的。

·Active versus inactive memory

提供了关于系统内存的active内存信息,Inactive内存是被kswapd守护进程交换到磁盘上的空间。

(3)网络参数

·Packets received and sent

这个参数表示了一个指定网卡接收和发送的数据包的数量。

·Bytes received and sent

这个参数表示了一个指定网卡接收和发送的数据包的字节数。

·Collisions per second

这个值提供了发生在指定网卡上的网络冲突的数量。持续的出现这个值代表在网络架构上出现了瓶颈,而不是在服务器端出现的问题。在正常配置的网络中冲突是非常少见的,除非用户的网络环境都是由hub组成。

·Packets dropped

这个值表示了被内核丢掉的数据包数量,可能是因为防火墙或者是网络缓存的缺乏。

·Overruns

Overruns表达了超出网络接口缓存的次数,这个参数应该和packets dropped值联系到一起来判断是否存在在网络缓存或者网络队列过长方面的瓶颈。

·Errors

这个值记录了标志为失败的帧的数量。这个可能由错误的网络配置或者部分网线损坏导致,在铜口千兆以太网环境中部分网线的损害是影响性能的一个重要因素。

(4)块设备参数

·Iowait

CPU等待I/O操作所花费的时间。这个值持续很高通常可能是I/O瓶颈所导致的。

·Average queue length

I/O请求的数量,通常一个磁盘队列值为2到3为最佳情况,更高的值说明系统可能存在I/O瓶颈。

·Average wait

响应一个I/O操作的平均时间。Average wait包括实际I/O操作的时间和在I/O队列里等待的时间。

·Transfers per second

描述每秒执行多少次I/O操作(包括读和写)。Transfers per second的值与kBytes per second结合起来可以帮助你估计系统的平均传输块大小,这个传输块大小通常

和磁盘子系统的条带化大小相符合可以获得最好的性能。

·Blocks read/write per second

这个值表达了每秒读写的blocks数量,在2.6内核中blocks是1024bytes,在早些的内核版本中blocks可以是不同的大小,从512bytes到4kb。

·Kilobytes per second read/write

按照kb为单位表示读写块设备的实际数据的数量。

(注:本文来自红皮书Tuning Red Hat Enterprise Linux on IBM eServer xSeries Servers redp3861.pdf)

二.性能监测工具

Linux开放和灵活的特性使得它有很多的性能监测软件,这些工具中有的是传统UNIX系统的Linux版本,其他是专门为Linux设计的工具,大部分Linux性能监测工具都是基于proc虚拟文件系统的。

在这一章里我们介绍一些常用性能监测工具和讨论一些有用的命令。所有我们讨论的工具,除了Capacity Manager,都是Red Hat Enterprise Linux (RHEL)所提供的,不需要从网络下载或者其他途径得到。

1.uptime

Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量。如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average 值将增加。另一方面,如果每个进程都可以立刻得到访问CPU的时间,这个值将减少。

load average的最佳值是1,这说明每个进程都可以立刻被CPU处理。在不同的系统间这个值也是不同的,例如一个单CPU的工作站,load average为1或者2都是可以接受的,但是在一个多CPU的系统中这个值通常为8或者10。

你可以使用uptime判断一个性能问题是出现在服务器上还是网络上。例如,如果一个网络应用运行性能不理想,运行uptime检查系统负载是否比较高,如果不是这个问题更可能出现在你的网络上。

Uptime命令执行示例

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

Tip:你可以用w命令代替uptime,w命令也可以提供目前登陆用户的信息。

2.Dmesg

Dmesg的主要功能是显示内核信息,当硬件或者内核中加载的模块出现问题的时候dmesg可以提供一些有用的信息。另外,利用dmesg你可以查看有哪些硬件安装在你的服务器上。在每次启动的时候,Linux检查硬件并且记录这些信息。你可以使用/bin/dmesg命令来查看这些信息。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

3.Top

Top命令显示了实际CPU使用情况,默认情况下,它显示了服务器上占用CPU的任务信息并且每5秒钟刷新一次。你可以通过多种方式分类它们,包括PID、时间和内存使用情况。

下图是一个top命令结果的示例,

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

你可以使用renice命令为一个进程分配新的优先级。如果一个进程宕掉或者占用了太多的内存,可以使用kill命令杀死进程。下面是输出值的介绍,PID:进程标识

USER;进程所有者的用户名

PRI:进程的优先级

NI:nice级别

SIZE:进程占用的内存数量(代码+数据+堆栈)

RSS;进程使用的物理内存数量

SHARE;该进程和其他进程共享内存的数量

STAT:进程的状态:S=休眠状态,R=运行状态,T=停止状态,D=中断休眠状态,Z=僵尸状态

%CPU:共享的CPU使用

%MEM;共享的物理内存

TIME:进程占用CPU的时间

COMMAND:启动任务的命令行(包括参数)

Top命令有下面几个有用的热键,包括

t:是否显示概要信息

m:是否显示内存信息

A:通过不同的系统资源情况分类显示结果,对快速判断系统中影响性能的进程十分有效

f:输入一个top的交互式的配置画面

o:激活交换式的分类的选择

进程的优先级和nice级别

进程优先级是一个决定进程被CPU执行优先顺序的参数,内核会根据需要调整这个值。Nice值是一个对优先权的限制。进程优先级的值不能低于nice值。(nice值越低优先级越高)

进程优先级是无法去手动改变的,只有通过改变nice值去间接的调整进程优先级。如果一个进程运行的太慢了,你可以通过指定一个较低的nice值去为它分配更多的CPU 资源。当然,这意味着其他的一些进程将被分配更少的CPU资源,运行更慢一些。Linux支持nice值的范围是19(低优先级)到-20(高优先级),默认的值是0。如果需要改变一个进程的nice值为负数(高优先级),必须使用su命令登陆到root用户。下面是一些调整nice值的命令示例,

以nice值-5开始程序xyz

#nice –n -5 xyz

改变已经运行的程序的nice值

#renice level pid

将pid为2500的进程的nice值改为10

#renice 10 2500

僵尸进程

当一个进程被结束,在它结束之前通常需要用一些时间去完成所有的任务(比如关闭打开的文件),在一个很短的时间里,这个进程的状态为僵尸状态。在进程完成所有关闭任务之后,会向父进程提交它关闭的信息。有些情况下,一个僵尸进程不能关闭它自己,这时这个进程状态就为z(zombie)。不能使用kill命令杀死僵尸进程,因为它已经标志为“dead”。如果你无法摆脱一个僵尸进程,你可以杀死它的父进程,这个僵尸进程也就消失了。然而,如果父进程是init进程,你不能杀死init进程,因为init是一个重要的系统进程,这种情况下你只能通过一次重新启动来摆脱僵尸进程。

4.iostat

iostat是sysstat的一部分,如果你没有安装这个包,在Red Hat Enterprise Linux光盘中找到sysstat的rpm包进行安装。Iostat显示自系统启动后的平均CPU时间(与uptime 类似),它也可以显示磁盘子系统的使用情况,iostat可以用来监测CPU利用率和磁盘利用率。下图是一个命令输出的示例,

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

CPU利用率分四个部分:

%user:user level(应用)的CPU占用率情况

%nice:加入nice优先级的user level的CPU占用率情况

%sys:system level(内核)的CPU占用情况

%idle:空闲的CPU资源情况

磁盘占用率有下面几个部分:

Device:块设备名

Tps:设备每秒进行传输的数量(每秒的I/O请求)。多个单独的I/O请求可以被组成一个传输操作,因为一个传输操作可以是不同的容量。

Blk_read/s, Blk_wrtn/s:该设备每秒读写的块的数量。块可能为不同的容量。块的大小一般为1024、2048、4048byte。例如,块设备/dev/sda1的块大小可以通过下面命令查

# dumpe2fs -h /dev/sda1 |grep -F "Block size"

会得到类似下面的输出

dumpe2fs 1.34 (25-Jul-2003)

Block size: 1024

Blk_read, Blk_wrtn:自系统启动以来读写的块设备的总量。

5.Vmstat

Vmstat命令提供了对进程、内存、页面I/O块和CPU等信息的监控,vmstat可以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同频率的监测结果。下面是一个vmstat命令的输出结果的示例。

注:在取样模式中需要考虑在数据收集中可能出现的误差,将取样频率设为比较低的值可以尽可能的减小误差的影响。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

下面介绍一下各列的含义

·process(procs)

r:等待运行时间的进程数量

b:处在不可中断睡眠状态的进程

w:被交换出去但是仍然可以运行的进程,这个值是计算出来的

·memoryswpd:虚拟内存的数量

free:空闲内存的数量

buff:用做缓冲区的内存数量

·swap

si:从硬盘交换来的数量

so:交换到硬盘去的数量

·IO

bi:向一个块设备输出的块数量

bo:从一个块设备接受的块数量

·system

in:每秒发生的中断数量,包括时钟

cs:每秒发生的context switches的数量

·cpu(整个cpu运行时间的百分比)

us:非内核代码运行的时间(用户时间,包括nice时间)

sy:内核代码运行的时间(系统时间)

id:空闲时间,在Linux 2.5.41之前的内核版本中,这个值包括I/O等待时间

等待I/O操作的时间,在Linux 2.5.41之前的内核版本中这个值为0

Vmstat命令提供了大量的附加参数,可以参考vmstat的man手册去查询所有的参数,下面列举几个十分有用的参数。

·m:显示内核的内存利用率

·a:显示内存页面信息,包括活跃和不活跃的内存页面

·n:显示报头行,这个参数在使用取样模式并将命令结果输出到一个文件时非常有用。例如root#vmstat –n 2 10以2秒的频率显示10输出结果

·当使用-p {分区}时,vmstat提供对I/O结果的统计

6.ps和pstree

ps和pstree命令是系统分析最常用的基本命令,ps命令提供了一个正在运行的进程的列表,列出进程的数量取决于命令所附加的参数。例如ps –A 命令列出所有进程和它们相应的进程ID(PID),进程的PID是使用其他一些工具之前所必须了解的,例如pmap或者renice。

在运行java应用的系统上,ps –A 命令的输出很容易就会超过屏幕的显示范围,这样就很难得到所有进程的完整信息。这时,使用pstree命令可以以树状结构来显示所有的进程信息并且可以整合子进程的信息。Pstree命令对分析进程的来源十分有用。下面是命令的示例,

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

7.Numastat

随着NUMA架构的不断发展,例如eServer xSeries 445及其后续产品eServer xSeries 460,现在NUMA架构已经成为了企业级数据中心的主流。然而,NUMA架构在性能调优方面面临了新的挑战,例如内存分配的问题在NUMA系统之前并没人感兴趣,Red Hat Enterprise Linux 4提供了一个监测NUMA架构的工具。Numastat命令提供了本地内存与远程内存使用情况的对比和各个节点的内存使用情况。Numa_miss列显示分配失败的本地内存,numa_foreign列显示分配远程内存(访问速度慢)信息,过多的调用远程内存将增加系统的延迟从而影响整个系统的性能。使运行在一个节点上的进程都访问本地内存将极大的改善系统的性能。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

8.sar

sar程序是sysstat安装包的一部分,如果你没有安装这个包,在Red Hat Enterprise Linux的源文件中寻找这个rpm包进行安装,sar命令用于收集、报告和保存系统的信息。Sar命令由三个应用组成:sar,用与显示数据;sa1和sa2,用于收集和存储数据。关于sar工具的详细参数说明可以参考man手册。

为了以后分析日志,可以使用sa1和sa2配置系统获得并且记录日志信息。为了实现这个目的,如下图例所示向/etc/crontab中加入相应的内容。注意默认的情况下cron每天

都会定时的运行sar命令,如果系统安装了sar相应的安装包。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

sar命令所生成的数据保存在/var/log/sa/目录下,数据按照时间保存,可以根据时间来查询相应的性能数据。例如,显示21号的网络信息使用下面的命令sar -n DEV -f sa21|less,命令结果如下,

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

你也可以使用sar在命令行下得到一个实时的执行结果,收集的数据可以包括CPU利用率、内存页面、网络I/O等等。如下例所示,

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

9.KDE System Guard

KDE System Guard (KSysguard)是一个KDE的任务管理器和性能监测工具。它是一个客户端/服务器结构的应用,因此可以监测本地或者远程主机。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

图形界面中可以用左侧的Sensor选择显示的信息,一个Sensor可以返回一个简单的值或者更复杂的信息例如表格。针对每一类信息都提供了一个或多个显示信息,这些显示信息可以保存或者互相独立的在工作表中加载。

KSysguard窗口中包括菜单栏、工具栏和状态栏,页面浏览和工作区。当你第一次打开时,可以看到默认的情况:本地主机做为localhost列在Sensor浏览里,在工作区中有两个表格。每个Sensor监测某些系统参数,所有的Sensor显示可以在工作区中以拖拽的形式操作,有下面三个选项:

·可以在工作区中删除和代替Sensor

·可以编辑工作表的属性以增加显示的行数和列数

·可以建立新的工作表并且加入新的Sensor以满足应用的需要

下面介绍一下工作区,如下图所示工作区中显示两张表,

·system load:在启动KSysguard中默认显示的

·process Table

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

System load工作表中包括四个Sensor窗口,cpu负载、平均负载、物理内存和交换空间。多个Sensor可以被显示在一个窗口中,如果想查看窗口中正在监测的分Sensor信息,将鼠标移到图标上,相应的说明会显示出来。也可以在图标上点鼠标右键选择Properties,然后选择页面表,就可以看到相应的说明信息。

Red Hat Enterprise Linux在IBM xSeries服务器上的调优

点击Process Table表将显示所有在服务器上运行进程的信息,这个表默认显示的是系统CPU的利用率,但是它可以通过选择其他分页来显示其他信息。