Linux 的性能調優的思路

Linux操作系統是一個開源產品,也是一個開源軟件的實踐和應用平臺,在這個平臺下有無數的開源軟件支撐,我們常見的apache、tomcat、mysql等。

開源軟件的最大理念是自由、開放,那么Linux作為一個開源平臺,最終要實現的是通過這些開源軟件的支持,以最低廉的成本,達到應用最優的性能。因此,談到性能問題,主要實現的是Linux操作系統和應用程序的最佳結合。

01 性能問題綜述

系統的性能是指操作系統完成任務的有效性、穩定性和響應速度。

Linux系統管理員可能經常會遇到系統不穩定、響應速度慢等問題,例如在Linux上搭建了一個web服務,經常出現網頁無法打開、打開速度慢等現象,而遇到這些問題,就有人會抱怨Linux系統不好,其實這些都是表面現象。

操作系統完成一個任務時,與系統自身設置、網絡拓樸結構、路由設備、路由策略、接入設備、物理線路等多個方面都密切相關,任何一個環節出現問題,都會影響整個系統的性能。

因此當Linux應用出現問題時,應當從應用程序、操作系統、服務器硬件、網絡環境等方面綜合排查,定位問題出現在哪個部分,然后集中解決。

在應用程序、操作系統、服務器硬件、網絡環境等方面,影響性能最大的是應用程序和操作系統兩個方面,因為這兩個方面出現的問題不易察覺,隱蔽性很強。而硬件、網絡方面只要出現問題,一般都能馬上定位。

下面主要講解操作系統方面的性能調優思路,應用程序方面需要具體問題具體對待。

以下從影響Linux性能的因素、分析性能涉及的人員、系統性能優化工具、系統性能評價標準四個方面介紹優化Linux的一般思路和方法。

02 影響 Linux 性能的因素

2.1 系統硬件資源

(1)CPU

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

目前大部分CPU在同一時間內只能運行一個線程,超線程的處理器可以在同一時間運行多個線程,因此,可以利用處理器的超線程特性提高系統性能。在Linux系統下,只有運行SMP內核才能支持超線程,但是,安裝的CPU數量越多,從超線程獲得的性能方面的提高就越少。

另外,Linux內核會把多核的處理器當作多個單獨的CPU來識別,例如兩個4核的CPU,在Lnux系統下會被當作8個單核CPU。但是從性能角度來講,兩個4核的CPU和8個單核的CPU并不完全等價,根據權威部門得出的測試結論,前者的整體性能要比后者低25%~30%。

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

(2)內存

內存的大小也是影響Linux性能的一個重要的因素,內存太小,系統進程將被阻塞,應用也將變得緩慢,甚至失去響應;內存太大,導致資源浪費。

Linux系統采用了物理內存和虛擬內存兩種方式,虛擬內存雖然可以緩解物理內存的不足,但是占用過多的虛擬內存,應用程序的性能將明顯下降,要保證應用程序的高性能運行,物理內存一定要足夠大;但是過大的物理內存,會造成內存資源浪費,例如,在一個32位處理器的Linux操作系統上,超過8GB的物理內存都將被浪費。

因此,要使用更大的內存,建議安裝64位的操作系統,同時開啟Linux的大內存內核支持。

由于處理器尋址范圍的限制,在32位Linux操作系統上,應用程序單個進程最大只能使用4GB的內存,這樣以來,即使系統有更大的內存,應用程序也無法“享”用,解決的辦法就是使用64位處理器,安裝64位操作系統。在64位操作系統下,可以滿足所有應用程序對內存的使用需求 ,幾乎沒有限制。

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

(3)磁盤I/O性能

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

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

2.2 操作系統相關資源

基于操作系統的性能優化也是多方面的,可以從系統安裝、系統內核參數、網絡參數、文件系統等幾個方面進行衡量,下面依次進行簡單介紹。

(1)系統安裝優化

系統優化可以從安裝操作系統開始,當安裝Linux系統時,磁盤的劃分,SWAP內存的分配都直接影響以后系統的運行性能。

例如,磁盤分配可以遵循應用的需求:

對于對寫操作頻繁而對數據安全性要求不高的應用,可以把磁盤做成RAID 0;而對于對數據安全性較高,對讀寫沒有特別要求的應用,可以把磁盤做成RAID 1;對于對讀操作要求較高,而對寫操作無特殊要求,并要保證數據安全性的應用,可以選擇RAID 5;對于對讀寫要求都很高,并且對數據安全性要求也很高的應用,可以選擇RAID10/01。

這樣通過不同的應用需求設置不同的RAID級別,在磁盤底層對系統進行優化操作。

隨著內存價格的降低和內存容量的日益增大,對虛擬內存SWAP的設定,現在已經沒有了所謂虛擬內存是物理內存兩倍的要求,但是SWAP的設定還是不能忽略,根據經驗,如果內存較小(物理內存小于4GB),一般設置SWAP交換分區大小為內存的2倍;

如果物理內存大于8GB小于16GB,可以設置SWAP大小等于或略小于物理內存即可;如果內存大小在16GB以上,原則上可以設置SWAP為0,但并不建議這么做,因為設置一定大小的SWAP還是有一定作用的。

(2)內核參數優化

系統安裝完成后,優化工作并沒有結束,接下來還可以對系統內核參數進行優化,不過內核參數的優化要和系統中部署的應用結合起來整體考慮。

例如,如果系統部署的是Oracle數據庫應用,那么就需要對系統共享內存段、系統信號量、文件句柄等參數進行優化設置;如果部署的是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通過分布處理磁盤請求、定位數據、保持Cache 的一致性來提供對文件系統數據的低延遲、高帶寬的訪問,因此,XFS極具伸縮性,非常健壯,具有優秀的日志記錄功能、可擴展性強、快速寫入性能等優點。

目前服務器端ext4和xfs是主流文件系統,如何選擇合適的文件系統,需要根據文件系統的特點加上業務的需求綜合來定。

2.3 應用程序軟件資源

應用程序的優化其實是整個優化工程的核心,如果一個應用程序存在BUG,那么即使所有其他方面都達到了最優狀態,整個應用系統還是性能低下,所以,對應用程序的優化是性能優化過程的重中之重,這就對程序架構設計人員和程序開發人員提出了更高的要求。

03 分析系統性能涉及的人員

3.1 Linux運維人員

在做性能優化過程中,Linux運維人員承擔著很重要的任務。

首先,Linux運維人員要了解和掌握操作系統的當前運行狀態,例如系統負載、內存狀態、進程狀態、CPU負荷等信息,這些信息是檢測和判斷系統性能的基礎和依據;

其次,Linux運維人員還有掌握系統的硬件信息,例如磁盤I/O、CPU型號、內存大小、網卡帶寬等參數信息,然后根據這些信息綜合評估系統資源的使用情況。

第三,作為一名Linux運維人員,還要掌握應用程序對系統資源的使用情況,更深入的一點就是要了解應用程序的運行效率,例如是否有程序BUG、內存溢出等問題,通過對系統資源的監控,就能發現應用程序是否存在異常,如果確實是應用程序存在問題,需要把問題立刻反映給程序開發人員,進而改進或升級程序。

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

3.2 系統架構設計人員

系統性能優化涉及的第二類人員就是應用程序的架構設計人員。如果Linux運維人員在經過綜合判斷后,發現影響性能的是應用程序的執行效率,那么程序架構設計人員就要及時介入,深入了解程序運行狀態。

首先,系統架構設計人員要跟蹤了解程序的執行效率,如果執行效率存在問題,要找出哪里出現了問題;其次,如果真的是架構設計出現了問題,那么就要馬上優化或改進系統架構,設計更好的應用系統架構。

3.3 軟件開發人員

系統性能優化最后一個環節涉及的是程序開發人員,在Linux運維人員或架構設計人員找到程序或結構瓶頸后,程序開發人員要馬上介入進行相應的程序修改。修改程序要以程序的執行效率為基準,改進程序的邏輯,有針對性地進行代碼優化。

例如,Linux運維人員在系統中發現有條SQL語句耗費大量的系統資源,抓取這條執行的SQL語句,發現此SQL語句的執行效率太差,是開發人員編寫的代碼執行效率低造成的,這就需要把這個信息反饋給開發人員,開發人員在收到這個問題后,可以有針對性的進行SQL優化,進而實現程序代碼的優化。

從上面這個過程可以看出,系統性能優化一般遵循的流程是:

首先Linux運維人員查看系統的整體狀況,主要從系統硬件、網絡設備、操作系統配置、應用程序架構和程序代碼五個方面進行綜合判斷;

如果發現是系統硬件、網絡設備或者操作系統配置問題,Linux運維人員可以根據情況自主解決;

如果發現是程序結構問題,就需要提交給程序架構設計人員;

如果發現是程序代碼執行問題,就交給開發人員進行代碼優化。這樣就完成了一個系統性能優化的過程。

04 調優總結

系統性能優化是個涉及面廣、繁瑣、長久的工作,尋找出現性能問題的根源往往是最難的部分,一旦找到出現問題的原因,性能問題也就迎刃而解。因此,解決問題的思路變得非常重要。

例如,Linux系統下的一個網站系統,用戶反映,網站訪問速度很慢,有時無法訪問。

第一步要做的是檢測網絡,可以通過ping命令檢查網站的域名解析是否正常,同時,ping服務器地址的延時是否過大等等,通過這種方式,首先排除網絡可能出現的問題;

如果網絡沒有問題,接著進入第二步,對Linux系統的內存使用狀況進行檢查,因為網站響應速度慢,一般跟內存關聯比較大,通過free、vmstat等命令判斷內存資源是否緊缺;

如果內存資源不存在問題,進入第三步,檢查系統CPU的負載狀況,可以通過sar、vmstat、top等命令的輸出綜合判斷CPU是否存在過載問題,如果CPU沒有問題;

繼續進入第四步,檢查系統的磁盤I/O是否存在瓶頸,可以通過iostat、vmstat等命令檢查磁盤的讀寫性能,如果磁盤讀寫也沒有問題,Linux系統自身的性能問題基本排除,最后要做的是檢查程序本身是否存在問題。

通過這樣的思路,層層檢測,步步排查,性能問題就“無處藏身”,查找出現性能問題的環節也就變得非常簡單。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/166422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166422.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java反射調用kotlin中的類,Object類,Companion對

Java反射調用kotlin中的類,Object類,Companion對象 1. Java反射調用kotlin中的普通類 kotlin普通類: package com.common; class TestNormal {fun get():String{return "Nolmal abc"}fun showNum(v:Int){println("Nolmal s…

uniApp微信支付實現

后端:小程序下單 - 小程序支付 | 微信支付商戶文檔中心 服務端需要請求:https://api.mch.weixin.qq.com該地址獲取微信支付Api接口需要的參數。 服務端請求接口需要的Body參數: 客戶端(前端)需要調用:wx.…

12V降3.3V100mA穩壓芯片WT7133

12V降3.3V100mA穩壓芯片WT7133 WT71XX系列是一款采用CMOS工藝實現的三端高輸入電壓、低壓差、小輸出電流電壓穩壓器。 它的輸出電流可達到100mA,輸入電壓可達到18V。其固定輸出電壓的范圍是2.5V~8.0V,用戶 也可通過外圍應用電路來實現可變電壓…

加載minio中存儲的靜態文件html,不顯示樣式與js

問題描述:點擊鏈接獲取的就是純靜態文件,但是通過瀏覽器可以看到明明加載了css文件與js文件 原因:仔細看你會發現加載css文件顯示的contentType:text/html文件,原來是minio上傳文件時將所有文件的contentType設置成了text/html 要在上傳時指定文件,根據文章的類型指定的Conten…

css 固定按鈕到頁面頂部或者底部的實現方式

實現方式 要將按鈕固定到頂部或底部&#xff0c;可以使用CSS的定位屬性來實現。下面是一種常用的方法&#xff1a; 創建一個包含按鈕的HTML元素&#xff0c;例如一個<div>元素。確保給它添加一個唯一的id&#xff0c;以便在CSS中進行定位。 <div id"myButton&qu…

從二極管到linux服務器

軟件設計: os: 批處理系統: 輪詢系統:單片機裸機開發 實時系統:ucosii,rtos,rt-thread、風和系統、liteos(主要是海思系列soc在用)等 非實時系統:linux 對os任務切換時寄存器的功能有理解。 對ipc機制有理解。 bsp: 需要對寄存器、單片機內部總線、iic、spi、uart、c…

win10開機黑屏只有鼠標?這份指南幫你輕松解決!

win10是一個出色的操作系統&#xff0c;但有時用戶可能會遇到開機后只有鼠標顯示在屏幕上的問題&#xff0c;這種情況可能會讓人感到困惑和沮喪。在本文中&#xff0c;我們將介紹三種解決win10開機黑屏只有鼠標的方法&#xff0c;以幫助您快速恢復正常的桌面環境。 方法1&#…

Ubuntu18.4中安裝wkhtmltopdf + Odoo16配置【二】

deepin Linux 安裝wkhtmltopdf 1、先從官網的鏈接里下載linux對應的包 wkhtmltopdf/wkhtmltopdf 下載需要的版本&#xff0c;推薦版本&#xff0c;新測有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解壓下載的文件 解壓后會有一個wkhtmltox文件夾 3…

CTA-GAN:基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影 CT到增強CT的合成技術

Generative Adversarial Network–based Noncontrast CT Angiography for Aorta and Carotid Arteries 基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影背景貢獻實驗方法損失函數Thinking 基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影 https://github.com/ying-f…

可自行DIY單TYPE-C接口設備實現DRP+OTG功能芯片

隨著USB-C接口的普及&#xff0c;歐盟的法律法規強制越來越多的設備開始采用這種接口。由于 USB-C接口的高效性和便攜性&#xff0c;使各種設備之間的連接和數據傳輸變得非常方便快捷&#xff0c;它們不僅提供了強大的功能&#xff0c;還為我們的日常生活和工作帶來了極大的便利…

Python與設計模式--代理模式

5-Python與設計模式–代理模式 一、網絡服務器配置白名單 代理模式是一種使用頻率非常高的模式&#xff0c;在多個著名的開源軟件和當前多個著名的互聯網產品后 臺程序中都有所應用。下面我們用一個抽象化的簡單例子&#xff0c;來說明代理模式。 首先&#xff0c;構造一個網絡…

ssm+vue的企業文檔管理系統(有報告)。Javaee項目,ssm vue前后端分離項目。

演示視頻&#xff1a; ssmvue的企業文檔管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;ssm vue前后端分離項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&…

Talk | 牛津大學博士后研究員邊佳旺:SC-DepthV3-動態場景中的自監督單目深度估計

本期為TechBeat人工智能社區第550期線上Talk。 北京時間11月23日(周四)20:00&#xff0c;牛津大學博士后研究員—邊佳旺的Talk已準時在TechBeat人工智能社區開播&#xff01; 他與大家分享的主題是: “SC-DepthV3&#xff1a;動態場景中的自監督單目深度估計”&#xff0c;介紹…

Vocoder,聲碼器詳解——語音信號處理學習(十)

參考文獻&#xff1a; [1] Vocoder (由助教許博竣同學講授)嗶哩嗶哩bilibili [2] Oord A, Dieleman S, Zen H, et al. Wavenet: A generative model for raw audio[J]. arXiv preprint arXiv:1609.03499, 2016. [3] https://deepmind.com/blog/article/wavenet-generative-mode…

【華為OD機試題】 給出一個區間的集合,請合并所有重疊的區間。

給出一個區間的集合&#xff0c;請合并所有重疊的區間。 示例 1: 輸入: [[1,3],[2,6],[8,10],[15,18]] #輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6]. 示例 2: #輸入: [[1,4],[4,5]] #輸出: [[1,5]] #解釋: 區間 [1,4] 和 [4,5] 可被視…

window.requestAnimationFrame+localStorage+canvas實現跨窗口小球連線效果

文章目錄 前言效果代碼后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;前端系列文章 &#x1f431;?&#x1f453;博主在前端領域還有很多知識和技術需要掌握&#xff0c;正在不斷努力填補技術短板。(如果出現錯誤&#xff0c;感謝大家…

FPGA----ZCU106使用petalinux 2019.1的第一個app開發

1、petalinux在zcu106上的構建參見前文 FPGA----ZCU106使用petalinux 2019.1&#xff08;全網最詳&#xff09;-CSDN博客文章瀏覽閱讀31次。本文完成了Vivado 2019.1版本下的基于ZCU106的全部linux系統移植https://blog.csdn.net/qq_37912811/article/details/1345197352、我們…

Vatee萬騰科技的未來探險:Vatee數字創新的獨特發現

在科技的浩瀚海洋中&#xff0c;Vatee萬騰科技如一艘探險船般&#xff0c;勇敢地駛向未知的數字化領域。這次未來的探險&#xff0c;不僅是一場科技創新的冒險&#xff0c;更是對數字化時代的獨特發現和深刻探討。 Vatee萬騰科技視科技創新為一座高峰&#xff0c;而他們的未來探…

java類中局部變量和成員變量有啥區別?

java類中局部變量和成員變量有啥區別&#xff1f; 舉個例子&#xff0c;我們可以定義一個Person類&#xff0c;其中有兩個成員變量name和age&#xff0c;以及一個構造方法和一個show方法。在構造方法中&#xff0c;我們可以使用this關鍵字來引用成員變量&#xff0c;以區分同名…

基于亞馬遜云科技大語言模型等服務打造企業知識庫

背景 大語言模型是自然語言處理領域的一項重要技術&#xff0c;能夠通過學習大量的文本數據&#xff0c;生成具有語法和意義的自然語言文本。目前大語言模型已經成為了自然語言處理領域的一個熱門話題&#xff0c;引起了廣泛的關注和研究。 知識庫需求在各行各業中普遍存在&a…