Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache、tomcat、mysql、php等等,开源软件的最大理念是自由、开放,这么Linux作为一个开源平台,最终要实现的是通过这种开源软件的支持,以最低廉的成本,达到应用最优的性能。为此,提到性能问题,主要实现的是linux操作系统和应用程序的最佳结合。

1、性能问题综述

系统的性能是指操作系统完成任务的有效性、稳定性和响应速率。Linux系统管理员可能常常会碰到系统不稳定、响应速率慢等问题,比如在linux上搭建了一个web服务,常常出现网页未能打开、打开速率慢等现象,而遇见这种问题,就有人会责怪linux系统不好,虽然这种都是表面现象。操作系统完成一个任务时,与系统自身设置、网络拓朴结构、路由设备、路由策略、接入设备、物理线路等多个方面都密切相关,任何一个环节出现问题,还会影响整个系统的性能。因而当linux应用出现问题时,应该从应用程序、操作系统、服务器硬件、网络环境等方面综合排查,定位问题出现在那个部份,之后集中解决。

在应用程序、操作系统、服务器硬件、网络环境等方面,影响性能最大的是应用程序和操作系统两个方面,由于这两个方面出现的问题不易察觉,隐蔽性很强。而硬件、网络方面只要出现问题,通常都能马上定位。下边主要讲解操作系统方面的性能调优思路,应用程序方面须要具体问题具体对待。

以下从影响Linux性能的诱因、分析性能涉及的人员、系统性能优化工具、系统性能评价标准四个方面介绍优化Linux的通常思路和技巧。

2、影响Linux性能的诱因

2.1系统硬件资源

1.CPU

CPU是操作系统稳定运行的根本,CPU的速率与性能在很大程度上决定了系统整体的性能,因而,CPU数目越多、主频越高,服务器性能也就相对越好。但事实并非完全这么。

目前大部份CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因而,可以借助处理器的超线程特点增强系统性能。在Linux系统下linux系统编程,只有运行SMP内核能够支持超线程,然而,安装的CPU数目越多,从超线程获得的性能方面的提升就越少。另外,Linux内核会把多核的处理器当成多个单独的CPU来辨识,比如两个4核的CPU,在Lnux系统下会被当成8个单核CPU。并且从性能角度来讲,两个4核的CPU和8个单核的CPU并不完全等价,按照权威部门得出的测试推论,后者的整体性能要比前者低25%~30%。

web服务器搭建 linux_linux搭建各种服务_web服务器搭建 linux

可能出现CPU困局的应用有db服务器、动态Web服务器等,对于这类应用,要把CPU的配置和性能置于主要位置。

2.显存

显存的大小也是影响Linux性能的一个重要的诱因,显存太小,系统进程将被阻塞,应用也将显得平缓,甚至丧失响应;显存太大,造成资源浪费。Linux系统采用了数学显存和虚拟显存两种形式,虚拟显存其实可以减轻化学显存的不足linux 电子书,而且占用过多的虚拟显存,应用程序的性能将显著增长,要保证应用程序的高性能运行,化学显存一定要足够大;并且过大的化学显存,会导致显存资源浪费,比如,在一个32位处理器的Linux操作系统上,超过8GB的化学显存都将被浪费。因而,要使用更大的显存,建议安装64位的操作系统,同时开启Linux的大显存内核支持。

因为处理器轮询范围的限制,在32位Linux操作系统上,应用程序单个进程最大只能使用4GB的显存,这样以来,虽然系统有更大的显存,应用程序也难以“享”用,解决的办法就是使用64位处理器,安装64位操作系统。在64位操作系统下,可以满足所有应用程序对显存的使用需求,几乎没有限制。

可能出现显存性能困局的应用有NOSQL服务器、数据库服务器、缓存服务器等,对于这类应用要把显存大小置于主要位置。

3.c盘I/O性能

c盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,假如c盘I/O性能得不到满足,都会造成应用停滞。好在现在的c盘都采用了好多方式来提升I/O性能,例如常见的c盘RAID技术。

通过RAID技术组成的c盘组,就相当于一个大硬碟,用户可以对它进行分区低格、建立文件系统等操作,跟单个化学硬碟一模一样,惟一不同的是RAIDc盘组的I/O性能比单个硬碟要高好多,同时在数据的安全性也有很大提高。

web服务器搭建 linux_web服务器搭建 linux_linux搭建各种服务

按照c盘组合形式的不同,RAID可以分为RAID0,RAID1、RAID2、RAID3、RAID4、RAID5、RAID6、RAID7、RAID0+1、RAID10等级别,常用的RAID级别有RAID0、RAID1、RAID5、RAID0+1,这儿进行简单介绍。

RAID0:通过把多块硬碟粘合成一个容量更大的硬碟组,提升了c盘的性能和吞吐量。这些方法成本低,要求起码两个c盘,并且没有容错和数据修补功能,因此只能用在对数据安全性要求不高的环境中。

RAID1:也就是c盘镜像,通过把一个c盘的数据镜像到另一个c盘上,最大限度地保证c盘数据的可靠性和可修补性,具有很高的数据冗余能力,但c盘借助率只有50%,因此,成本最高,多用在保存重要数据的场合。

RAID5:采用了c盘分段加奇偶校准技术,进而提升了系统可靠性,RAID5读出效率很高,写入效率通常,起码须要3块盘。容许一块c盘故障,而不影响数据的可用性。

RAID0+1:把RAID0和RAID1技术结合上去就成了RAID0+1,起码须要4个硬碟。此种方法的数据除分布在多个盘北外,每位盘都有其镜像盘,提供全冗余能力,同时容许一个c盘故障,而不影响数据可用性,并具有快速读/写能力。

通过了解各个RAID级别的性能,可以按照应用的不同特点,选择适宜自身的RAID级别,因而保证应用程序在c盘方面达到最优性能。

4.网路宽带

Linux下的各类应用,通常都是基于网路的,因而网路带宽也是影响性能的一个重要诱因,低速的、不稳定的网路将造成网路应用程序的访问阻塞,而稳定、高速的网路带宽,可以保证应用程序在网路上畅通无阻地运行。辛运的是,如今的网路通常都是百兆带宽或光纤网路,带宽问题对应用程序性能导致的影响也在逐渐增加。

web服务器搭建 linux_linux搭建各种服务_web服务器搭建 linux

2.2操作系统相关资源

基于操作系统的性能优化也是多方面的,可以从系统安装、系统内核参数、网络参数、文件系统等几个方面进行评判,下边依次进行简单介绍。

1.系统安装优化

系统优化可以从安装操作系统开始,当安装Linux系统时,c盘的界定,SWAP显存的分配都直接影响之后系统的运行性能,比如,c盘分配可以依循应用的需求:对于对写操作频繁而对数据安全性要求不高的应用,可以把c盘弄成RAID0;而对于对数据安全性较高,对读写没有非常要求的应用,可以把c盘弄成RAID1;对于对读操作要求较高,而对写操作无特殊要求,并要保证数据安全性的应用,可以选择RAID5;对于对读写要求都很高,但是对数据安全性要求也很高的应用,可以选择RAID10/01。这样通过不同的应用需求设置不同的RAID级别,在c盘底层对系统进行优化操作。

随着显存价钱的增加和显存容量的日渐减小,对虚拟显存SWAP的设定,如今已然没有了所谓虚拟显存是化学显存两倍的要求,而且SWAP的设定还是不能忽视,按照经验,假如显存较小(化学显存大于4GB),通常设置SWAP交换分区大小为显存的2倍;假如化学显存小于8GB大于16GB,可以设置SWAP大小等于或略大于化学显存即可;假如显存大小在16GB以上,原则上可以设置SWAP为0,但并不建议如此做,由于设置一定大小的SWAP还是有一定作用的。

2.内核参数优化

系统安装完成后,优化工作并没有结束,接出来还可以对系统内核参数进行优化,不过内核参数的优化要和系统中布署的应用结合上去整体考虑。诸如,假如系统布署的是Oracle数据库应用,这么就须要对系统共享显存段(kernel.shmmax、kernel.shmmni、kernel.shmall)、系统讯号量(kernel.sem)、文件句柄(fs.file-max)等参数进行优化设置;假如布署的是Web应用,这么就须要依照Web应用特点进行网路参数的优化,比如更改net.ipv4.ip_local_port_range、net.ipv4.tcp_tw_reuse、net.core.somaxconn等网路内核参数。

3.文件系统优化

文件系统的优化也是系统资源优化的一个重点,在Linux下可选的文件系统有ext2、ext3、ReiserFS、ext4、xfs,按照不同的应用,选择不同的文件系统。

Linux标准文件系统是从VFS开始的,之后是ext,接着就是ext2,应当说,ext2是Linux上标准的文件系统,ext3是在ext2基础上降低日志产生的,从VFS到ext4,其设计思想没有太大变化,都是初期UNIX家族基于超级块和inode的设计理念。

XFS文件系统是一个中级日志文件系统,XFS通过分布处理c盘恳求、定位数据、保持Cache的一致性来提供对文件系统数据的低延后、高带宽的访问,因而,XFS极具伸缩性web服务器搭建 linux,特别粗壮,具有优秀的日志记录功能、可扩充性强、快速写入性能等优点。

目前服务器端ext4和xfs是主流文件系统,怎么选择合适的文件系统,须要依照文件系统的特征加上业务的需求综合来定。

2.3应用程序软件资源

应用程序的优化虽然是整个优化工程的核心,假如一个应用程序存在BUG,这么虽然所有其他方面都达到了最优状态,整个应用系统还是性能低下,所以,对应用程序的优化是性能优化过程的重中之重,这就对程序构架设计人员和程序开发人员提出了更高的要求。

三、分析系统性能涉及的人员

3.1、Linux运维人员

linux搭建各种服务_web服务器搭建 linux_web服务器搭建 linux

在做性能优化过程中,Linux运维人员承当着很重要的任务,首先,Linux运维人员要了解和把握操作系统的当前运行状态,比如系统负载、内存状态、进程状态、CPU负荷等信息,这种信息是测量和判别系统性能的基础和根据;其次,Linux运维人员还有把握系统的硬件信息,比如c盘I/O、CPU机型、内存大小、网卡带宽等参数信息,之后按照这种信息综合评估系统资源的使用情况;第三,作为一名Linux运维人员,还要把握应用程序对系统资源的使用情况,更深入的一点就是要了解应用程序的运行效率,比如是否有程序BUG、内存溢出等问题,通过对系统资源的监控,才能发觉应用程序是否存在异常,假如确实是应用程序存在问题,须要把问题立即反映给程序开发人员,从而改进或升级程序。

性能优化本身就是一个复杂和冗长的过程,Linux运维人员只有了解了系统硬件信息、网络信息、操作系统配置信息和应用程序信息能够有针对性地的展开对服务器性能优化,这就要求Linux运维人员有充足的理论知识、丰富的实战经验以及周密剖析问题的脑子。

3.2系统构架设计人员

系统性能优化涉及的第二类人员就是应用程序的构架设计人员。假如Linux运维人员在经过综合判定后,发觉影响性能的是应用程序的执行效率,这么程序构架设计人员就要及时介入,深入了解程序运行状态。首先,系统构架设计人员要跟踪了解程序的执行效率,假如执行效率存在问题,要找出那里出现了问题;其次,假如真的是构架设计出现了问题,这么就要马上优化或改进系统构架,设计更好的应用系统构架。

3.3软件开发人员

系统性能优化最后一个环节涉及的是程序开发人员,在Linux运维人员或构架设计人员找到程序或结构困局后,程序开发人员要马上介入进行相应的程序更改。更改程序要以程序的执行效率为基准,改进程序的逻辑,有针对性地进行代码优化。诸如,Linux运维人员在系统中发觉有条SQL句子花费大量的系统资源,抓取这条执行的SQL句子,发觉此SQL句子的执行效率太差,是开发人员编撰的代码执行效率低导致的,这就须要把这个信息反馈给开发人员,开发人员在收到这个问题后,可以有针对性的进行SQL优化,从而实现程序代码的优化。

从里面这个过程可以看出,系统性能优化通常遵守的流程是:首先Linux运维人员查看系统的整体状况,主要从系统硬件、网络设备、操作系统配置、应用程序构架和程序代码五个方面进行综合判定,假如发觉是系统硬件、网络设备或则操作系统配置问题,Linux运维人员可以按照情况自主解决;假如发觉是程序结构问题,就须要递交给程序构架设计人员;假如发觉是程序代码执行问题,就交给开发人员进行代码优化。这样就完成了一个系统性能优化的过程。

四、调优总结

系统性能优化是个涉及面广、繁琐、长久的工作,找寻出现性能问题的症结常常是最难的部份,一旦找到出现问题的缘由,性能问题也就迎刃而解。因而,解决问题的思路显得十分重要。

比如,linux系统下的一个网站系统,用户反映,网站访问速率很慢,有时难以访问。

针对这个问题,第一步要做的是测量网路,可以通过ping命令检测网站的域名解析是否正常,同时,ping服务器地址的延时是否过大等等,通过这些方法,首先排除网路可能出现的问题;假如网路没有问题,接着步入第二步,对linux系统的显存使用状况进行检测,由于网站响应速率慢,通常跟显存关联比较大,通过free、vmstat等命令判定显存资源是否短缺,假如显存资源不存在问题,步入第三步,检测系统CPU的负载状况web服务器搭建 linux,可以通过sar、vmstat、top等命令的输出综合判定CPU是否存在过载问题,假若CPU没有问题,继续步入第四步,检测系统的c盘I/O是否存在困局,可以通过iostat、vmstat等命令检测c盘的读写性能,假如c盘读写也没有问题,linux系统自身的性能问题基本排除,最后要做的是检测程序本身是否存在问题。通过这样的思路,层层检查,步步排查,性能问题就“无处藏身”,查找出现性能问题的环节也就显得十分简单。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复