解决系统性能问题的一般思路 下面从影响操作系统性能的因素、性能优化工具、系统性能评价标准三个方面介绍优化Linux的一般思路和方法。 影响Linux性能的因素 1.CPU CPU是操作系统稳定运行的根本,CPU的速度与性能很大一部分决定了系统整体的性能,因此,cpu数量越多、主频越高,服务器性能也就相对越好。但事实也并非完全如此。 目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而,可以利用处理器的超线程特性提高系统性能,在linux系统下,只有运行SMP内核才能支持超线程,但是,安装的CPU数量越多,从超线程获得的性能上的提高就越少。另外,Linux内核会把多核的处理器当作多个单独的CPU来识别,例如两颗4核的CPU,在linux系统下会认到8颗CPU。但是从性能角度来讲,两颗4核的CPU和8颗单核的CPU并不完全等价,根据权威部门得出的测试结论,前者的整体性能要低于后者25%-30%。 可能出现CPU瓶颈的应用有邮件服务器、动态web服务器等,对于这类应用要把CPU的配置和性能放在主要位置。 2.内存 内存的大小也是影响linux性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应,内存太大,导致资源浪费。Linux系统采用了物理内存和虚拟内存的概念,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降,要保证应用程序的高性能运行,物理内存一定要足够大,但是过大的物理内存,会造成内存资源浪费,例如在一个32位处理器的Linux操作系统上,超过8G的物理内存都将被浪费。因此,要使用更大的内存,建议安装64位的操作系统,同时开启linux的大内存内核支持。 由于处理器寻址范围的限制,在32位linux操作系统上,应用程序单个进程最大只能使用2G的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用64为处理器,安装64位操作系统,在64位操作系统下,可以满足所有应用程序对内存的使用需求[g1] ,几乎没有限制。 可能出现内存性能瓶颈的应用有打印服务器、数据库服务器、静态web服务器等,对于这类应用要把内存大小放在主要位置。 3.磁盘I/O宽带 磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用的停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。 RAID的英文全称为:Redundant Array of Independent Disks。翻译成中文即为独立磁盘冗余阵列,简称磁盘阵列。RAID通过把多块独立的磁盘(物理硬盘)按不同方式组合起来形成一个磁盘组(逻辑硬盘),从而提供比单个硬盘更高的I/O性能和数据冗余。 通过RAID技术组成的磁盘组,就相当于一个大硬盘,用户可以对它进行分区格式化、建立文件系统等操作,跟单个物理硬盘一模一样,唯一不同的是RAID磁盘组的I/O性能比单个硬盘要高很多,同时对数据的安全性也有很大提升。 根据磁盘组合方式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这里简单介绍如下: l RAID 0:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。 l RAID 1:也就是磁盘镜像,通过把一个磁盘的数据镜像到另一个磁盘上,最大限度的保证磁盘数据的可靠性和可修复性,具有很高的数据冗余能力,但磁盘利用率只有50%,因而,成本最高,多用在保存重要数据的场合。 l RAID5:采用了磁盘分段加奇偶校验技术,从而提高了系统可靠性,RAID5读出效率很高,写入效率一般,至少需要3块盘。允许一块磁盘故障,而不影响数据的可用性。 l RAID0+1:把RAID0和RAID1技术结合起来就成了RAID0+1,至少需要4个硬盘。此种方式的数据除分布在多个盘上外,每个盘都有其镜像盘,提供全冗余能力,同时允许一个磁盘故障,而不影响数据可用性,并具有快速读/写能力。 通过对各个RAID级别的介绍,我们就可以根据应用的不同特性,选择适合自身的RAID级别,从而保证应用程序在磁盘方面达到最优的性能。 4.网络I/O宽带 Linux下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的带宽,可以保证应用程序在网络上畅通无阻的运行。幸运的是,现在的网络一般都是千兆带宽,或者光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。 5.总结 通过对以上四个方面的讲述,不难看出,每个方面之间都是相互依赖的,不能孤立的从某个方面来排查问题,当一个方面出现性能问题时,往往会引发其它方面出现问题。例如大量的磁盘读写势必消耗CPU和I/O资源,而内存的不足会导致频繁的进行内存页写入磁盘、磁盘写到内存的操作,造成磁盘I/O瓶颈,同时,大量的网络流量也会造成CPU过载。所以,在处理性能问题时,要纵观全局,从各个方面进行综合考虑。
Linux系统性能分析工具-操作篇
系统性能分析工具
上面的章节介绍了影响linux性能的几个方面以及如何解决这些方面的问题,但是如何才能从系统上发现是某个方面或某几个方面出现问题了呢,这就需要使用linux系统提供的几个常用性能分析工具,下面就具体讲述这几个常用性能分析工具的使用。 1.vmstat命令 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,很多linux发行版本都默认安装了此命令工具,利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。 vmstat使用语法如下: vmstat [-V] [-n] [delay [count]] 各个选项及参数含义如下: l -V:表示打印出版本信息,是可选参数。 l -n:表示在周期性循环输出时,输出的头部信息仅显示一次。 l delay:表示两次输出之间的间隔时间。 l count:表示按照“delay”指定的时间间隔统计的次数。默认为1。 例如: vmstat 3 表示每3秒钟更新一次输出信息,循环输出,按ctrl+c停止输出。 vmstat 3 5 表示每3秒更新一次输出信息,统计5次后停止输出。 2.iostat命令 iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时也会给出CPU使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。 iostat一般都不随系统安装,要使用iostat工具,需要在系统上安装一个Sysstat的工具包,Sysstat是一个开源软件,官方地址为 http://pagesperso-orange.fr/sebastien.godard 可以选择源代码包或rpm包的方式安装,这里不在讲述安装过程,安装完毕,系统会多出3个命令:iostat、sar和mpstat。然后就可以直接在系统下运行iostat命令了。 iostat使用语法如下: iostat [ -c | -d ] [ -k ] [ -t ] [ -x [ device ] ] [ interval [ count ] ] 各个选项及参数含义如下: -c:显示CPU的使用情况。 -d:显示磁盘的使用情况。 -k:每秒以k bytes为单位显示数据。 -t:打印出统计信息开始执行的时间。 -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。 interval:指定两次统计间隔的时间; count:按照“interval”指定的时间间隔统计的次数。 3.sar命令 sar命令很强大,是分析系统性能的重要工具之一,通过sar指令,可以全面的获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。 sar使用格式为: sar [options] [g1] [-o filename] [interval [count] ] 各个选项及参数含义如下: l options 为命令行选项,sar命令的选项很多,下面只列出常用选项: Ø -A:显示系统所有资源设备(CPU、内存、磁盘)的运行状况。 Ø -u:显示系统所有CPU在采样时间内的负载状态。 Ø -P:显示当前系统中指定CPU的使用情况。 Ø -d:显示系统所有硬盘设备在采样时间内的使用状况。 Ø -r:显示系统内存在采样时间内的使用状况。 Ø -b:显示缓冲区在采样时间内的使用情况。 Ø -v:显示进程、文件、I节点和锁表状态。 Ø -n:显示网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示三个所有的信息。它们可以单独或者一起使用。 Ø -q:显示了运行队列的大小,它与系统当时的平均负载相同。 Ø -R:显示进程在采样时间内的活动情况。 Ø -y:显示终端设备在采样时间内的活动情况。 Ø -w:显示系统交换活动在采样时间内的状态。 l -o filename:表示将命令结果以二进制格式存放在文件中,filename是文件名。 l interval:表示采样间隔时间,是必须有的参数。 l count:表示采样次数,是可选参数,默认值是1。 例如: 要查看系统CPU的整体负载状况,每3秒统计一次,统计5次,可以使用以下组合: #sar –u 3 5 系统的CPU计数是从0开始的,如果要查看第二颗CPU的运行负载,使用下面组合: #sar –P 1 3 5 要查看系统磁盘的读写性能,使用以下组合: sar -d 3 5 同理,查看系统内存使用情况、网络运行状态,可以分别使用下面命令: sar -r 5 2 sar -n DEV 5 3 (可以查看网络状况,从而确定网络流量)
15.2.3系统性能分析标准 性能调优的主要目的是使系统能够有效的利用各种资源,最大的发挥应用程序和系统之间的性能融合,使应用高效、稳定的运行。但是,衡量系统资源利用率好坏的标准没有一个严格的定义,针对不同的系统和应用也没有一个统一的说法,因此,这里提供的标准其实是一个经验值,表15.1给出了判定系统资源利用状况的一般准则: 影响性能因素 评判标准 好 坏 糟糕 CPU user%+sys%<70% user%+sys%=85% user%+sys%>=90% 内存 Swap In(si)=0 Swap Out(so)=0 Per CPU with 10 page/s More Swap In & Swap Out 磁盘 iowait%<20% iowait%=35% iowait%>=50%
其中: %user:表示CPU处在用户模式下的时间百分比。 %sys:表示CPU处在系统模式下的时间百分比。 %iowait:表示CPU等待输入输出完成时间的百分比。 swap in:即si,表示虚拟内存的页导入,即从SWAP DISK交换到RAM。 swap out:即so,表示虚拟内存的页导出,即从RAM交换到SWAP DISK。
Linux下CPU使用率查看命令:http://www.cnblogs.com/xianghang123/archive/2011/08/25/2153591.html
Linux下iostat命令详解:http://www.cnblogs.com/peida/archive/2012/12/28/2837345.html
15.2.4本节总结 以上我们讲解了三个常用的系统性能分析工具,其实linux下性能分析工具还有很多,例如uptime可以检查CPU的平均负载,free可以查看系统内存的使用状况,ps、top可以配合监控系统的进程运行状态,netstat可以监测网络流量状况等等,这些命令的使用方法前面已经讲述很多,故不在这里讲解。 系统性能优化是个涉及面广、繁琐、长久的工作,寻找出现性能问题的根源往往是最难的部分,一旦找到出现问题的原因,性能问题也就迎刃而解。因此,解决问题的思路变得非常重要。
案例:linux系统下的一个网站系统,用户反映,网站访问速度很慢,有时无法访问。 针对这个问题,第一步要做的是检测网络,可以通过ping命令检查网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这种方式,首先排除网络可能出现的问题;如果网络没有问题,接着进入第二步,对linux系统的内存使用状况进行检查,因为网站响应速度慢,一般跟内存关联比较大,通过free、vmstat等命令判断内存资源是否紧缺,如果内存资源不存在问题,进入第三步,检查系统CPU的负载状况,可以通过sar、vmstat、top等命令的输出综合判断CPU是否存在过载问题,如果CPU没有问题,继续进入第四步,检查系统的磁盘I/O是否存在瓶颈,可以通过iostat、vmstat等命令检查磁盘的读写性能,如果磁盘读写也没有问题,linux系统自身的性能问题基本排除,最后要做的是检查程序本身是否存在问题。通过这样的思路,层层检测,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就变得非常简单。
Linux系统备份策略探讨
一 为何要备份Linux系统 一个应用中的Linux系统,受内部环境影响、底层硬件的影响、外来黑客的攻击,出现问题是难免的,作为一名系统管理人员,自身的职责并不是要保证系统永远不出现问题,事实上也是不可能的,而是在系统出现故障或者崩溃时,能以最快的速度,在最短的时间内恢复系统的运行,保证数据的安全,将故障带来的损失降到最低点。 这就要求系统管理人员对操作系统和业务应用有一个合理的备份恢复策略,完美的备份策略可以保证业务的零宕机时间和数据的完全恢复。由于业务是运行在操作系统之上,因此操作系统的备份与恢复效率直接关系到整个业务系统的恢复程度。所以操作系统的备份变得至关重要。 二 Linux系统需要备份的数据 在windows下有ghost软件,可以将整个系统完全复制到另一个硬盘,ghost是一种磁盘镜像技术,可以将系统盘所有数据镜像到另一个备份硬盘上,当系统出现问题,用备份的镜像磁盘,在短时间内即可将系统所有数据完全恢复。 Linux下虽然也有类似ghost的工具,但是由于硬件的兼容性、恢复的复杂度等影响,ghost并不能很好的用于Linux镜像备份,同时如果Linux系统磁盘分区过大,备份和恢复过程都会很长,因此ghost并不适合备份Linux操作系统。 事实上,全盘备份系统并不是一个好的策略,Linux操作系统也没有必要完全备份,我们仅仅需要备份系统的所有配置文件即可,这样备份过程迅速,恢复也快。
Linux系统需要备份的文件大致可以分为两类:系统级配置文件和用户级配置文件。 系统级配置文件主要是系统全局的一些配置信息,例如/etc/目录、/home目录、/boot目录、/root目录等。这些目录对系统运行至关重要,并且针对不同的系统应用设置都不尽相同,如果丢失了这些文件,即使新的操作系统能很快安装完毕,对系统也要重新配置,花费的时间会更长。 用户级配置文件是用户的业务应用与系统相关的配置文件,这些文件是运行系统业务应用必不可少的,一旦丢失,系统业务就会无法启动,例如/usr/local整个目录、/var/www目录、/etc整个目录等。 重要的文件是必须要备份的,那么不需要备份的目录有哪些呢,例如/dev目录、/proc目录、/mnt目录、/tmp目录等这些目录都是不需要备份的,因为这些目录中要么是内存数据,要么是临时文件,没有重要的数据,备份的原则是重要数据一定要全部备份,无用数据绝不备份。
三 备份的介质与方式 要备份数据,就要有存放数据的安全容器,对存储介质的基本要求一般从存取速度、存储安全、存储容量三个方面进行考虑。 存取速度是对存储介质的一个基本要求,数据的备份是一个读写操作极度频繁的过程,存取速度非常高的备份介质,可以大大缩短备份数据的时间,同时也可以减少恢复数据的时间。 存储安全性是对存储介质的一个硬性要求,不安全的存储设备还不如不要存储介质,现在很多存储设备都对安全性做了很多优化,例如做raid磁盘阵列,cache读写等。专业的存储厂商有EMC、IBM、SUN等,都有自己的存储设备。 存储容量也是选择存储介质必须要考虑的一个方面,过大的存储空间会造成存储设备的浪费,过小的存储空间,导致数据存储失败,因此,必须根据备份数据的大小,选择相应大小的存储介质。 1.常用备份介质 常用的存储介质有光驱、磁盘、磁带机、软盘等,这里重点介绍一下磁带机的使用方法: Linux下使用磁带机的方式有多种, tar命令是最经常使用的方法,tar主要用于单机环境下,将数据直接写入磁带机。
2.数据备份方式 数据的备份方式常见的有本地备份和异地容灾备份,可以根据对数据重要性的要求程度,选择合理的备份方式。 本地备份就是将数据备份到本地系统的磁盘、磁带或者专有存储设备上,本地备份是对数据安全的一级考虑,主要是针对系统故障或者黑客攻击等造成的数据丢失情况。 异地容灾是对数据和业务安全性考虑的更高指标,主要是将数据备份到另一个城市或者国家,主要是针对可能发生的自然灾害,例如地震、火灾、水灾等,当这些自然灾害发生时,本地备份数据也将全部丢失,此时,就需要通过远程的容灾备份来恢复数据。
四 制定备份策略 常用的备份策略有完全备份、增量备份,同时增量备份还可以分为差异增量备份和累计增量备份,下面简单讲述下它们之间的区别。 1.完全备份 完全备份就是将所有数据全部备份,对于Linux操作系统来说,就是将根分区下所有文件进行备份,完全备份的好处是:所有数据都进行了备份,系统任何数据丢失都能恢复,并且恢复效率高;缺点是备份时间较长,备份了很多无用数据,浪费了存储空间。 2.增量备份 在一个数据量很大的业务应用中,每天对系统进行完全备份是不现实的,这就需要增量备份策略了。增量备份就是只备份每天增加或者变化的数据,而不备份系统中没有变动的数据,这样备份的数据量就大大减少了,可以缩短备份时间,但是增量备份也有缺点,那就是恢复数据时比较复杂,需要用首次完全备份的数据和增量备份数据组合进行恢复,如果有多个增量备份文件,恢复过程将变得十分缓慢。 一个比较好的备份策略是:对于数据量不大,并且每天数据量增加不多的系统,建议选择完全备份,备份过程较短,恢复也很简单。对于数据量巨大,每天新增数据也很多的系统,一定要选择增量备份。
系统级相应监控指令:
http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html