基于Linux服務器的性能分析與優化

发布时间:2020-09-10 浏览次数:1181来源:百度文库

作为一名Linux系统管理员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行,但硬件问题、软件问题、网络环境等的复杂性和多变性,导致了对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题。 本文从系统入手,重点讲述由于系统软、硬件配置不当造成的性能问题,并且给出了检测系统故障和优化性能的一般方法和流程。

1.系統性能分析的目的

1.1 找到系统性能的瓶颈

系統的性能是指操作系統完成任務的有效性、穩定性和響應速度。Linux系統管理員可能經常會遇到系統不穩定、響應速度慢等問題,例如在Linux上搭建了一個Web服務,經常出現網頁無法打開、打開速度慢等現象。遇到這些問題,就有人會抱怨Linux系統不好,其實這些都是表面現象。操作系統完成一個任務是與系統自身設置、網絡拓樸結構、路由設備、路由策略、接入設備、物理線路等多個方面都密切相關的,任何一個環節出現問題,都會影響整個系統的性能。因此,當Linux應用出現問題時,應當從應用程序、操作系統、服務器硬件、網絡環境等方面綜合排查,定位問題出現在哪個部分,然後集中解決。

1.2 提供性能优化方案

查找系統性能瓶頸是個複雜而耗時的過程,需要在應用程序、操作系統、服務器硬件、網絡環境等方面進行查找和定位,影響性能最大的是應用程序和操作系統兩個方面,因爲這兩個方面出現的問題不易察覺,隱蔽性很強。而硬件、網絡方面出現的問題,一般都能馬上定位。一旦找到了系統性能問題,解決起來就非常迅速和容易,例如發現系統硬件存在問題,如果是物理故障,那麽更換硬件就可以了,如果是硬件性能不能滿足需求,升級硬件就可以了;如果發現是網絡問題,比如帶寬不夠、網絡不穩定,只需優化和升級網絡即可;如果發現是應用程序問題,修改或優化軟件系統即可;而如果是操作系統配置問題,修改系統參數、修改系統配置即可。

可見,只要找到了性能瓶頸,就可以提供性能優化方案,有標准、有目的地進行系統優化。

1.3 使系统硬件和软件资源的使用达到平衡

Linux操作系統是一個開源産品,也是一個開源軟件的實踐和應用平台,在這個平台下由無數的開源軟件支撐,常見的有Apache、Tomcat、MySQL、PHP等。開源軟件的最大理念是自由、開放,那麽Linux作爲一個開源平台,最終要實現的是通過這些開源軟件的支持,以最低廉的成本,達到應用性能的最優化。但是,系統的性能問題並非是孤立的,解決了一個性能瓶頸,可能會出現另一個性能瓶頸,所以說性能優化的最終目的是:在一定範圍內使系統的各項資源使用趨于合理並保持一定的平衡,即系統運行良好的時候恰恰就是系統資源達到了一個平衡狀態的時候。而在操作系統中,任何一項資源的過度使用都會破壞這種平衡狀態,從而導致系統響應緩慢或者負載過高。例如,CPU資源的過度使用會造成系統中出現大量的等待進程,導致應用程序響應緩慢,而進程的大量增加又會導致系統內存資源的增加,當物理內存耗盡時,系統就會使用虛擬內存,而虛擬內存的使用又會造成磁盤I/O的增加並加大CPU的開銷。因此,系統性能的優化就是在硬件、操作系統、應用軟件之間找到一個平衡點。

2.分析系統性能涉及的人員

2.1  Linux系统管理人员

在做性能優化過程中,系統管理人員承擔著很重要的任務,首先,系統管理人員要了解和掌握操作系統的當前運行狀態,例如系統負載、內存狀態、進程狀態、CPU負荷等信息,這些信息是檢測和判斷系統性能的基礎和依據;其次,系統管理人員還有掌握系統的硬件信息,例如磁盤I/O、CPU型號、內存大小、網卡帶寬等參數信息,然後根據這些信息綜合評估系統資源的使用情況;第三,作爲一名系統管理人員,還要掌握應用程序對系統資源的使用情況,更深入的一點就是要了解應用程序的運行效率,例如是否有程序BUG、內存溢出等問題,通過對系統資源的監控,就能發現應用程序是否存在異常,如果確實是應用程序存在問題,需要把問題立刻反映給程序開發人員,進而改進或升級程序。

性能優化本身就是一個複雜和繁瑣的過程,系統管理人員只有了解了系統硬件信息、網絡信息、操作系統配置信息和應用程序信息才能有針對性地的展開對服務器性能優化,這就要求系統管理員有充足的理論知識、豐富的實戰經驗以及缜密分析問題的頭腦。

2.2系統架構設計人員

系統性能優化涉及的第二類人員就是應用程序的架構設計人員。如果系統管理人員在經過綜合判斷後,發現影響性能的是應用程序的執行效率,那麽程序架構設計人員就要及時介入,深入了解程序運行狀態。首先,系統架構設計人員要跟蹤了解程序的執行效率,如果執行效率存在問題,要找出哪裏出現了問題;其次,如果真的是架構設計出現了問題,那麽就要馬上優化或改進系統架構,設計更好的應用系統架構。

2.3軟件開發人員

系統性能優化最後一個環節涉及的是程序開發人員,在系統管理員或架構設計人員找到程序或結構瓶頸後,程序開發人員要馬上介入進行相應的程序修改。修改程序要以程序的執行效率爲基准,改進程序的邏輯,有針對性地進行代碼優化。例如,系統管理人員在系統中發現有條SQL語句耗費大量的系統資源,抓取這條執行的SQL語句,發現此SQL語句的執行效率太差,是開發人員編寫的代碼執行效率低造成的,這就需要把這個信息反饋給開發人員,開發人員在收到這個問題後,可以有針對性的進行SQL優化,進而實現程序代碼的優化。

從上面這個過程可以看出,系統性能優化一般遵循的流程是:首先系統管理人員查看系統的整體狀況,主要從系統硬件、網絡設備、操作系統配置、應用程序架構和程序代碼五個方面進行綜合判斷,如果發現是系統硬件、網絡設備或者操作系統配置問題,系統管理員可以根據情況自主解決;如果發現是程序結構問題,就需要提交給程序架構設計人員;如果發現是程序代碼執行問題,就交給開發人員進行代碼優化。這樣就完成了一個系統性能優化的過程。

3.影響Linux性能的各種因素

3.1 系统硬件资源

1.CPU

CPU是操作系統穩定運行的根本,CPU的速度與性能在很大程度上決定了系統整體的性能,因此,CPU數量越多、主頻越高,服務器性能也就相對越好。但事實並非完全如此。

目前大部分CPU在同一時間內只能運行一個線程,超線程的處理器可以在同一時間運行多個線程,因此,可以利用處理器的超線程特性提高系統性能。在Linux系統下,只有運行SMP內核才能支持超線程,但是,安裝的CPU數量越多,從超線程獲得的性能方面的提高就越少。另外,Linux內核會把多核的處理器當作多個單獨的CPU來識別,例如兩個4核的CPU,在Lnux系統下會被當作8個單核CPU。但是從性能角度來講,兩個4核的CPU和8個單核的CPU並不完全等價,根據權威部門得出的測試結論,前者的整體性能要比後者低25%~30%。

可能出現CPU瓶頸的應用有郵件服務器、動態Web服務器等,對于這類應用,要把CPU的配置和性能放在主要位置。

2.內存

內存的大小也是影響Linux性能的一個重要的因素,內存太小,系統進程將被阻塞,應用也將變得緩慢,甚至失去響應;內存太大,導致資源浪費。Linux系統采用了物理內存和虛擬內存兩種方式,虛擬內存雖然可以緩解物理內存的不足,但是占用過多的虛擬內存,應用程序的性能將明顯下降,要保證應用程序的高性能運行,物理內存一定要足夠大;但是過大的物理內存,會造成內存資源浪費,例如,在一個32位處理器的Linux操作系統上,超過8GB的物理內存都將被浪費。因此,要使用更大的內存,建議安裝64位的操作系統,同時開啓Linux的大內存內核支持。

由于处理器寻址范围的限制,在32位Linux操作系统上,应用程序单个进程最大只能使用2GB的内存,这样以来,即使系统有更大的内存,应用程序也无法“享”用,解决的办法就是使用64位处理器,安装64位操作系统。在64位操作系统下,可以满足所有应用程序对内存的使用需求 ,几乎没有限制。

可能出現內存性能瓶頸的應用有打印服務器、數據庫服務器、靜態Web服務器等,對于這類應用要把內存大小放在主要位置。

3.磁盤I/O性能

磁盤的I/O性能直接影響應用程序的性能,在一個有頻繁讀寫的應用中,如果磁盤I/O性能得不到滿足,就會導致應用停滯。好在現今的磁盤都采用了很多方法來提高I/O性能,比如常見的磁盤RAID技術。

   RAID的英文全称为:Redundant Array of Independent Disk,即独立磁盘冗余阵列,简称磁盘阵列。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,這裏進行簡單介紹。

    RAID 0:通过把多块硬盘粘合成一个容量更大的硬盘组,提高了磁盘的性能和吞吐量。这种方式成本低,要求至少两个磁盘,但是没有容错和数据修复功能,因而只能用在对数据安全性要求不高的环境中。

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

    RAID5:采用了磁盤分段加奇偶校驗技術,從而提高了系統可靠性,RAID5讀出效率很高,寫入效率一般,至少需要3塊盤。允許一塊磁盤故障,而不影響數據的可用性。

    RAID0+1:把RAID0和RAID1技術結合起來就成了RAID0+1,至少需要4個硬盤。此種方式的數據除分布在多個盤上外,每個盤都有其鏡像盤,提供全冗余能力,同時允許一個磁盤故障,而不影響數據可用性,並具有快速讀/寫能力。

   通过了解各个RAID级别的性能,可以根据应用的不同特性,选择适合自身的RAID级别,从而保证应用程序在磁盘方面达到最优性能。

4.網絡寬帶

Linux下的各種應用,一般都是基于網絡的,因此網絡帶寬也是影響性能的一個重要因素,低速的、不穩定的網絡將導致網絡應用程序的訪問阻塞,而穩定、高速的網絡帶寬,可以保證應用程序在網絡上暢通無阻地運行。幸運的是,現在的網絡一般都是千兆帶寬或光纖網絡,帶寬問題對應用程序性能造成的影響也在逐步降低。

3.2 操作系统相关资源

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

1.系統安裝優化

   系统优化可以从安装操作系统开始,当安装Linux系统时,磁盘的划分,SWAP内存的分配都直接影响以后系统的运行性能,例如,磁盘分配可以遵循应用的需求:对于对写操作频繁而对数据安全性要求不高的应用,可以把磁盘做成RAID 0;而对于对数据安全性较高,对读写没有特别要求的应用,可以把磁盘做成RAID 1;对于对读操作要求较高,而对写操作无特殊要求,并要保证数据安全性的应用,可以选择RAID 5;对于对读写要求都很高,并且对数据安全性要求也很高的应用,可以选择RAID 01。这样通过不同的应用需求设置不同的RAID级别,在磁盘底层对系统进行优化操作。

   随着内存价格的降低和内存容量的日益增大,对虚拟内存SWAP的设定,现在已经没有了所谓虚拟内存是物理内存两倍的要求,但是SWAP的设定还是不能忽略,根据经验,如果内存较小(物理内存小于4GB),一般设置SWAP交换分区大小为内存的2倍;如果物理内存大于4GB小于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、xfs、ReiserFS,根据不同的应用,选择不同的文件系统。

   Linux标准文件系统是从VFS开始的,然后是ext,接着就是ext2,应该说,ext2是Linux上标准的文件系统,ext3是在ext2基础上增加日志形成的,从VFS到ext3,其设计思想没有太大变化,都是早期UNIX家族基于超级块和inode的设计理念。

   XFS文件系统是SGI开发的一个高级日志文件系统,后来移植到了Linux系统下,XFS通过分布处理磁盘请求、定位数据、保持Cache 的一致性来提供对文件系统数据的低延迟、高带宽的访问,因此,XFS极具伸缩性,非常健壮,具有优秀的日志记录功能、可扩展性强、快速写入性能等优点。

   ReiserFS是在Hans Reiser领导下开发出来的一款高性能的日志文件系统,它通过完全平衡树结构来管理数据, 包括文件数据,文件名及日志支持等,与ext2/ext3相比,最大的优点是访问性能和安全性大幅提升。ReiserFS具有高效、合理利用磁盘空间,先进的日志管理机制,特有的搜寻方式,海量磁盘存储等优点。

3.3 应用程序软件资源

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