優(yōu)化了一波Linux性能,面試官讓我出門左拐
作為一個技術(shù)博主,了不起不是在創(chuàng)作就是在創(chuàng)作的路上(當(dāng)然偶爾也會有點恰飯文~還指望大家多多支持),今天我們不說數(shù)據(jù)結(jié)構(gòu),我們來說說關(guān)于這個 Linux? ,之前了不起也給大家說過關(guān)于 Linux? 的學(xué)習(xí),以及在 Linux? 下如果編寫 Shell? 腳本,今天我們來看的,不是Linux 下的基礎(chǔ)命令的了,而是一些相對來說比較有意思的內(nèi)容。
Linux
關(guān)于 Linux? 系統(tǒng)是什么東西,我們在這里直接不進行贅述了,畢竟大家已經(jīng)都是作為有經(jīng)驗的開發(fā)人員,就算是沒有工作經(jīng)驗的人,至少也都知道,目前市場上比較流行的操作系統(tǒng),就這么幾種了,而這個Linux? 也是我們在開發(fā)中經(jīng)常用到的,但是你真的會 Linux? 一些高級操作么?比如如何優(yōu)化 Linux 的各種性能。
Linux 的性能優(yōu)化
說實話,干開發(fā)的,說到性能優(yōu)化,那可不單單只是對于 Linux 來進行,而是針對各個方面的內(nèi)容,比如::
程序設(shè)計、編程語言,再到系統(tǒng)、存儲、網(wǎng)絡(luò)等各種 底層基礎(chǔ)設(shè)施的方方面面,每一個組件都有可能出問題,而且很有可能多個組件同時出問題。
了不起之前也說了關(guān)于這個 SQL? 方面的優(yōu)化,我們今天只是來說這個 Linux 的性能優(yōu)化的。
要說性能優(yōu)化,肯定得說性能指標(biāo),那么性能指標(biāo)指的是什么呢?
性能指標(biāo):“高并發(fā)”和“響應(yīng)快”是從應(yīng)用負載的視角來考察性能,直接影響了產(chǎn)品終端的用戶體驗。也正對應(yīng)著性能優(yōu)化的兩個核心指標(biāo)——“吞吐”和“延時”。
Linux 性能優(yōu)化-CPU
既然說到 CPU 的性能優(yōu)化,那么首先我們要知道一個概念,那就是平均負載率。
平均負載率是什么呢?
平均負載是指單位時間內(nèi),系統(tǒng)處于 可運行狀態(tài) 和 不可中斷狀態(tài) 的平均進程數(shù),也就是平均活躍進程數(shù),它和 CPU 使用率并沒有直接關(guān)系。
切記,這個平均負載率不是說 CPU 的使用率,而是平均活躍進程數(shù)。
至于這個可運行進程呵呵這個不可終端狀態(tài)進程遷就更簡單了。
- 可運行狀態(tài)的進程
是指正在使用 CPU? 或者正在等待 CPU? 的進程,也就是我們常用 ps? 命令看到的,處于 R? 狀態(tài)(Running? 或 Runnable)的進程
- 不可中斷狀態(tài)的進程
是正處于內(nèi)核態(tài)關(guān)鍵流程中的進程,并且這些流程是不可打斷的, 比如最常見的是等待硬件設(shè)備的 I/O 響應(yīng),也就是我們在 ps? 命令中看到的 D? 狀態(tài) (Uninterruptible Sleep?,也稱為 Disk Sleep)的進程。
那么我們應(yīng)該怎么取查看系統(tǒng)的負載呢?
結(jié)果就是上面的圖,那么都代表了什么意思呢?
如果 1 分鐘、5 分鐘、15 分鐘的三個值基本相同,或者相差不大,那就說明系統(tǒng)負載很平穩(wěn)。
如果 1 分鐘的值遠小于 15 分鐘的值,就說明系統(tǒng)最近 1 分鐘的負載在減少,而過去 15 分鐘內(nèi)卻有很大的負載。
如果 1 分鐘的值遠大于 15 分鐘的值,就說明最近 1 分鐘的負載在增加,這種 增加有可能只是臨時性的,也有可能還會持續(xù)增加下去,所以就需要持續(xù)觀察。一旦 1 分鐘的平均負載接近或超過了 CPU 的個數(shù),就意味著系統(tǒng)正在發(fā)生過載的問題,這時就 得分析調(diào)查是哪里導(dǎo)致的問題,并要想辦法優(yōu)化了。
其實總結(jié)起來就很簡單,如果 load average 參數(shù)三個參數(shù)區(qū)別不大,那么就是很平穩(wěn),如果第一個小于第三個并且差值很大,那么負載很大,如果第一個值遠大于第三個只,那么就得需要排查一下,會不會出現(xiàn)超出負載的狀況了。
那么這個平均負載什么時候是最合適的呢?
其實這個平均負載最合適的狀態(tài)就是和 CPU? 的個數(shù)持平,怎么查看 CPU 的個數(shù)呢?
我們可以看到,這個邏輯 CPU 的個數(shù)是 8個,
當(dāng)平均負載比 CPU 個數(shù)還大的時候,系統(tǒng)已經(jīng)出現(xiàn) 了過載。在觀察負載數(shù)據(jù)時,我們有三個時間點的數(shù)據(jù),因此 都要看。三個不同時間間隔的平均值,其實給我們提供了,分析系統(tǒng)負載趨勢的 數(shù)據(jù)來源,讓我們能更全面的理解目前的負載狀況。
當(dāng)平均負載高于 CPU 數(shù)量 70% 的時候,你就應(yīng)該分析排查負載高的問題了(70% 這個數(shù)字并不是絕對的,最推薦的方法)。
其實 Linux 也是有很多的系統(tǒng)壓力測試工具的。
比如:sysstat 工具,就是,用來監(jiān)控和分析系統(tǒng)的性能。
至于工具怎么用,了不起在這里就不多做介紹了,畢竟這個內(nèi)容不是咱們今天想說的。
其實主要就是來定位哪個異常的進程,然后吧這個異常的線程直接給他干掉,先保證 Linux 的正常,然后在找這個異常進程出現(xiàn)的原因,最終解決掉這個問題。
CPU 使用率
上面我們說到了這個 CPU? 使用率,那么什么是 CPU 使用率呢?
CPU 使用率 = 1- (空閑時間/總 CPU 時間)
其實還可以使用 top 命令來查看系統(tǒng)總體的CPU和內(nèi)存使用情況,以及各個進程的資源使用情況。
知道怎么通過 CPU? 來優(yōu)化 Linux 性能了么?學(xué)會了么?