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