1. <b id="x0hdm"></b>
  • <sup id="x0hdm"></sup>

    1. 高级整理收纳师考证流程
      地區(qū):納米比亞
        類(lèi)型:喜劇
        時(shí)間:2025-06-05 08:17:48
      劇情簡(jiǎn)介
      本文來(lái)自微信公眾號(hào)開(kāi)發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負(fù)載是查看 Linux 服務(wù)器運(yùn)行狀態(tài)時(shí)很常用的一個(gè)性能指。在觀察線上服務(wù)器行狀況的時(shí)候,我們是經(jīng)常把負(fù)載找出來(lái)一看。在線上請(qǐng)求壓過(guò)大的時(shí)候,經(jīng)常是伴隨著負(fù)載的飆高。是負(fù)載的原理你真的解了嗎?我來(lái)列舉幾問(wèn)題,看看你對(duì)負(fù)載理解是否足夠的深刻負(fù)載是如何計(jì)算出來(lái)?負(fù)載高低和 CPU 消耗正相關(guān)嗎??jī)?nèi)核是如何暴露幾山載數(shù)據(jù)應(yīng)用層的?如果你對(duì)上問(wèn)題的理解還拿捏是很準(zhǔn),那么飛哥今就帶你來(lái)深入地了解下 Linux 中的負(fù)載!一、理解負(fù)載看過(guò)程我們經(jīng)常用 top 命令查看 Linux 系統(tǒng)的負(fù)載情況。一個(gè)典型的 top 命令輸出的負(fù)載如下所示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說(shuō)的負(fù)載,也叫系統(tǒng)平耕父負(fù)。因?yàn)閱渭兡骋粋€(gè)瞬的負(fù)載值并沒(méi)有太大義。所以 Linux 是計(jì)算了過(guò)去一段時(shí)間內(nèi)的平均人魚(yú),這三數(shù)分別代表的是過(guò)去 1 分鐘、過(guò)去 5 分鐘和過(guò)去 15 分鐘的平均負(fù)載值。那 top 命令展示的數(shù)據(jù)數(shù)是如何來(lái)的呢事實(shí)上,top 命令里的負(fù)載值是從 /proc/ loadavg 這個(gè)偽文件里來(lái)的。通過(guò) strace 命令跟蹤 top 命令的系統(tǒng)調(diào)用可以看的到這個(gè)過(guò)程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個(gè)偽文件的 open 函數(shù)。當(dāng)用戶(hù)態(tài)訪問(wèn) /proc/ loadavg 會(huì)觸發(fā)內(nèi)核定義的函數(shù)在這里會(huì)讀取內(nèi)核中平均負(fù)載變量,簡(jiǎn)單算后便可展示出來(lái)。體流程如下圖所示。們根據(jù)上述流程圖再開(kāi)了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會(huì)創(chuàng)建 /proc/ loadavg,并為其指定操作方法 loadavg_proc_fops。//file:?fs/proc/loadavg.cstatic?int?__init?proc_loadavg_init(void){?proc_create("loadavg",?0,?NULL,?&loadavg_proc_fops);?return?0;}在 loadavg_proc_fops 中包含了打開(kāi)該文件時(shí)對(duì)應(yīng)的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶(hù)態(tài)打開(kāi) /proc/ loadavg 文件時(shí),都會(huì)調(diào)用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來(lái)會(huì)調(diào)用 loadavg_proc_show 進(jìn)行處理,核心的計(jì)算是在這里魃成。//file:?fs/proc/loadavg.cstatic?int?loadavg_proc_show(struct?seq_file?*m,?void?*v){?unsigned?long?avnrun[3];?//獲取平均負(fù)載值?get_avenrun(avnrun,?FIXED_1/200,?0);?//打印輸出平均負(fù)載?seq_printf(m,?"%lu.%02lu?%lu.%02lu?%lu.%02lu?%ld/%d?%d\n",??LOAD_INT(avnrun[0]),?LOAD_FRAC(avnrun[0]),??LOAD_INT(avnrun[1]),?LOAD_FRAC(avnrun[1]),??LOAD_INT(avnrun[2]),?LOAD_FRAC(avnrun[2]),??nr_running(),?nr_threads,??task_active_pid_ns(current)-last_pid);?return?0;}在 loadavg_proc_show 函數(shù)中做了兩件事。調(diào)用 get_avenrun 讀取當(dāng)前負(fù)載值將平負(fù)載值按照一定的格打印輸出在上面的源中,大家看到了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的定義,代寫(xiě)的這么猥瑣是因?yàn)?核中并沒(méi)有 float、double 等浮點(diǎn)數(shù)類(lèi)型,而是用數(shù)來(lái)模擬的。這些代都是為了在整數(shù)和小之間轉(zhuǎn)化使的。知道個(gè)背景就行了,不用度展開(kāi)剖析。這樣用通過(guò)訪問(wèn) /proc/ loadavg 文件就可以讀取到內(nèi)計(jì)算的負(fù)載數(shù)據(jù)了。中獲取 get_avenrun 只是在訪問(wèn) avenrun 這個(gè)全局?jǐn)?shù)組而已。//file:kernel/sched/core.cvoid?get_avenrun(unsigned?long?*loads,?unsigned?long?offset,?int?shift){?loads[0]?=?(avenrun[0]?+?offset)??shift;?loads[1]?=?(avenrun[1]?+?offset)??shift;?loads[2]?=?(avenrun[2]?+?offset)??shift;}現(xiàn)在可以總結(jié)一下我們開(kāi)篇中的一個(gè)問(wèn)題:?內(nèi)核是如何暴露負(fù)數(shù)據(jù)給應(yīng)用層的??jī)?nèi)定義了一個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶(hù)打開(kāi)這個(gè)文件的時(shí)候,內(nèi)中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,接著訪問(wèn) avenrun 全局?jǐn)?shù)組變量 并將平均負(fù)載從整數(shù)化為小數(shù),并打印出。好了,另外一個(gè)新題又來(lái)了,avenrun 全局?jǐn)?shù)組變量中存儲(chǔ)的數(shù)據(jù)是何道家,是被如何計(jì)算出來(lái)的?二、內(nèi)核中負(fù)載的算過(guò)程接上小節(jié),我繼續(xù)查看 avenrun 全局?jǐn)?shù)組變量的數(shù)據(jù)來(lái)源。這個(gè)伯服組計(jì)算過(guò)程分為如下兩:1.PerCPU 定期匯總瞬時(shí)負(fù)載:時(shí)刷新每個(gè) CPU 當(dāng)前任務(wù)數(shù)到 calc_load_tasks,將每個(gè) CPU 的負(fù)載數(shù)據(jù)匯總起來(lái),得到系統(tǒng)當(dāng)前的瞬負(fù)載。2.定時(shí)計(jì)算系統(tǒng)平均負(fù)載:定時(shí)器據(jù)當(dāng)前系統(tǒng)整體瞬時(shí)載,使用指數(shù)加權(quán)移平均法(一種高效計(jì)平均數(shù)的算法)計(jì)算去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。接下來(lái)我們分成兩個(gè)小來(lái)分別介紹。2.1 PerCPU 定期匯總負(fù)載在 Linux 內(nèi)核中,有一個(gè)子系統(tǒng)叫做時(shí)間子系錫山。時(shí)間子系統(tǒng)里,初始了一個(gè)叫高分辨率的時(shí)器。在該定時(shí)器中定時(shí)將每個(gè) CPU 上的負(fù)載數(shù)據(jù)(running 進(jìn)程數(shù) + uninterruptible 進(jìn)程數(shù))匯總到系統(tǒng)全局的時(shí)負(fù)載變量 calc_load_tasks 中。整體流程如下圖所示。我們把上述程圖展開(kāi)看一下,我找到了高分辨率定時(shí)的源碼如下://file:kernel/time/tick-sched.cvoid?tick_setup_sched_timer(void){?//初始化高分辨率定時(shí)器?sched_timer?hrtimer_init(&ts-sched_timer,?CLOCK_MONOTONIC,?HRTIMER_MODE_ABS);?//將定時(shí)器的到期函數(shù)設(shè)置成?tick_sched_timer?ts-sched_timer.function?=?tick_sched_timer;?}在高分辨率初始化的候,將到期函數(shù)設(shè)置了 tick_sched_timer。通過(guò)這個(gè)函數(shù)讓每個(gè) CPU 都會(huì)周期性地執(zhí)行一些任務(wù)。其中刷當(dāng)前系統(tǒng)負(fù)載就是在個(gè)時(shí)機(jī)進(jìn)行的。這里一點(diǎn)要注意一個(gè)前提每個(gè) CPU 都有自己獨(dú)立的運(yùn)行隊(duì)列,我們根據(jù) tick_sched_timer 的源碼進(jìn)行追蹤,它依次通過(guò)調(diào)用 tick_sched_handle => update_process_times => scheduler_tick。最終在 scheduler_tick 中會(huì)刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因?yàn)槊總€(gè) CPU 都在定時(shí)刷,所以 calc_load_tasks 上記錄的就是整個(gè)系統(tǒng)的瞬負(fù)載值。我們來(lái)看下責(zé)刷新的 scheduler_tick 這個(gè)核心函數(shù)://file:kernel/sched/core.cvoid?scheduler_tick(void){?int?cpu?=?smp_processor_id();?struct?rq?*rq?=?cpu_rq(cpu);?update_cpu_load_active(rq);?}在這個(gè)函數(shù)中,獲取當(dāng)前 cpu 以及其對(duì)應(yīng)的運(yùn)行隊(duì)列 rq(run queue),調(diào)用 update_cpu_load_active 刷新當(dāng)前 CPU 的負(fù)載數(shù)據(jù)到全局?jǐn)?shù)組中。//file:kernel/sched/core.cstatic?void?update_cpu_load_active(struct?rq?*this_rq){??calc_load_account_active(this_rq);}//file:kernel/sched/core.cstatic?void?calc_load_account_active(struct?rq?*this_rq){?//獲取當(dāng)前運(yùn)行隊(duì)列的載相對(duì)值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時(shí)負(fù)載??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過(guò) calc_load_fold_active 獲取當(dāng)前運(yùn)行隊(duì)列的負(fù)載相對(duì)值,并應(yīng)龍它到全局瞬時(shí)負(fù)載值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前時(shí)長(zhǎng)右下整體瞬時(shí)負(fù)載總數(shù)了我們?cè)僬归_(kāi)看看是如根據(jù)運(yùn)行隊(duì)列計(jì)算負(fù)值的://file:kernel/sched/core.cstatic?long?calc_load_fold_active(struct?rq?*this_rq){?long?nr_active,?delta?=?0;?//?R?和?D?狀態(tài)的用戶(hù)?task?nr_active?=?this_rq-nr_running;?nr_active?+=?(long)?this_rq-nr_uninterruptible;?//?只返回變化的量?if?(nr_active?!=?this_rq-calc_load_active)?{??delta?=?nr_active?-?this_rq-calc_load_active;??this_rq-calc_load_active?=?nr_active;?}?return?delta;}哦,原來(lái)是同時(shí)計(jì)算了 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程的數(shù)量。升山應(yīng)于用戶(hù)空中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個(gè)長(zhǎng)期存在的數(shù)據(jù)。所以在土螻新 rq 里的進(jìn)程數(shù)到其上的時(shí)候,只需要刷變化量就行,不用全部重。因此上述函數(shù)返回是一個(gè) delta。2.2 定時(shí)計(jì)算系統(tǒng)平均負(fù)載上一小鳳凰中們找到了系統(tǒng)當(dāng)前瞬負(fù)載 calc_load_tasks 變量的更新過(guò)程?,F(xiàn)在們還缺一個(gè)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘平均負(fù)載的機(jī)制。統(tǒng)意義上,我們?cè)谟?jì)平均數(shù)的時(shí)候采取的法都是把過(guò)去一段時(shí)的數(shù)字都加起來(lái)然后均一下。把過(guò)去 N 個(gè)時(shí)間點(diǎn)的所有瞬時(shí)載都加起來(lái)取一個(gè)平數(shù)不完事了。這其實(shí)我們傳統(tǒng)意義上理解平均數(shù),假如有 n 個(gè)數(shù)字,分別是 x1, x2, ..., xn。那么這個(gè)數(shù)據(jù)集合的平均數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用這種簡(jiǎn)單的算法來(lái)計(jì)算均負(fù)載的話(huà),存在以幾個(gè)問(wèn)題:1.需要存儲(chǔ)過(guò)去每一個(gè)采樣周的數(shù)據(jù)假設(shè)我們每 10 毫秒都采集一次,那么就需要使用一個(gè)較大的數(shù)組將每一次樣的數(shù)據(jù)全部都存起,那么統(tǒng)計(jì)過(guò)去 15 分鐘的平均數(shù)就得存 1500 個(gè)數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)一個(gè)新觀察值,就要從移動(dòng)均中減去一個(gè)最早的察值,再加上一個(gè)最的觀察值,內(nèi)存數(shù)組頻繁地修改和更新。2.計(jì)算過(guò)程較為復(fù)雜計(jì)算的時(shí)候再周書(shū)整個(gè)數(shù)全加起來(lái),再除以樣總數(shù)。雖然加法很簡(jiǎn),但是成百上千個(gè)數(shù)的累加仍然很是繁瑣3.不能準(zhǔn)確表示當(dāng)前變化趨勢(shì)傳狪狪的平均計(jì)算過(guò)程中,所有數(shù)的權(quán)重是一樣的。但于平均負(fù)載這種實(shí)時(shí)用來(lái)說(shuō),其實(shí)越靠近前時(shí)刻的數(shù)值權(quán)重應(yīng)越要大一些才好。因這樣能更好反應(yīng)近期化的趨勢(shì)。所以,在 Linux 里使用的并不是我們所以為的統(tǒng)的平均數(shù)的計(jì)算方,而是采用的一種指加權(quán)移動(dòng)平均(Exponential Weighted Moving Average,EMWA)的平均數(shù)計(jì)算法。這種指加權(quán)移動(dòng)平均數(shù)計(jì)算在深度學(xué)習(xí)中有很廣的應(yīng)用。另外股票市里的 EMA 均線也是使用的是類(lèi)似的方求均值的方法。該算的數(shù)學(xué)表達(dá)式是:a1 = a0 * factor + a * (1 - factor)。這個(gè)算法想理解起來(lái)有點(diǎn)松山復(fù)雜,興趣的同學(xué)可以 Google 自行搜索。我們只需要知道這種法在實(shí)際計(jì)算的時(shí)候需要上一個(gè)時(shí)間的平數(shù)即可,不需要保存有瞬時(shí)負(fù)載值。另外是越靠近現(xiàn)在的時(shí)間權(quán)重越高,能夠很好表示近期變化趨勢(shì)。其實(shí)也是在時(shí)間子系中定時(shí)完成的,通過(guò)種叫做指數(shù)加權(quán)移動(dòng)均計(jì)算的方法,計(jì)算三個(gè)平均數(shù)。我們來(lái)細(xì)看下上圖中的執(zhí)行程。時(shí)間子系統(tǒng)將在鐘中斷中會(huì)注冊(cè)時(shí)鐘斷的處理函數(shù)為 timer_interrupt 。//file:arch/ia64/kernel/time.cvoid?__inittime_init?(void){?register_percpu_irq(IA64_TIMER_VECTOR,?&timer_irqaction);?ia64_init_itm();}static?struct?irqaction?timer_irqaction?=?{?.handler?=?timer_interrupt,?.flags?=?IRQF_DISABLED?|?IRQF_IRQPOLL,?.name?=??"timer"};當(dāng)每次時(shí)鐘節(jié)拍到來(lái)時(shí)會(huì)用到 timer_interrupt,依次會(huì)調(diào)用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計(jì)算的核心。它會(huì)獲取系當(dāng)前瞬時(shí)負(fù)載值 calc_load_tasks,然后來(lái)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶(hù)進(jìn)程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時(shí)負(fù)載值?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計(jì)算?avenrun[0]?=?calc_load(avenrun[0],?EXP_1,?active);?avenrun[1]?=?calc_load(avenrun[1],?EXP_5,?active);?avenrun[2]?=?calc_load(avenrun[2],?EXP_15,?active);?}獲取瞬時(shí)負(fù)載比較簡(jiǎn)單就是讀取一個(gè)內(nèi)存變而已。在 calc_load 中就是采用了我們前面說(shuō)的指數(shù)權(quán)移動(dòng)平均法來(lái)計(jì)算去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載的。具體實(shí)魚(yú)婦的代碼如下//file:kernel/sched/core.c/*?*?a1?=?a0?*?e?+?a?*?(1?-?e)?*/static?unsigned?longcalc_load(unsigned?long?load,?unsigned?long?exp,?unsigned?long?active){?load?*=?exp;?load?+=?active?*?(FIXED_1?-?exp);?load?+=?1UL?<>?FSHIFT;}雖然這個(gè)算法理解起挺復(fù)雜,但是代碼看來(lái)確實(shí)要簡(jiǎn)單不少,算量看起來(lái)很少。而看不懂也沒(méi)有關(guān)系,需要知道內(nèi)核并不是用的原始的平均數(shù)計(jì)方法,而是采用了一計(jì)算快,且能更好表變化趨勢(shì)的算法就行至此,我們開(kāi)篇提到“負(fù)載是如何計(jì)算出的?”這個(gè)問(wèn)題也有結(jié)論了。Linux 定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個(gè)全局系瞬時(shí)負(fù)載值中,然后定時(shí)使用指數(shù)加權(quán)移平均法來(lái)統(tǒng)計(jì)過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。三、平負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多同學(xué)將平均負(fù)載和 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)載高、CPU 消耗就會(huì)高,負(fù)載低,CPU 消耗就會(huì)低。在很老的 Linux 的版本里,統(tǒng)計(jì)負(fù)載時(shí)候確實(shí)是只計(jì)算了 runnable 的任務(wù)數(shù)量,這些進(jìn)程對(duì) CPU 有需求。在那個(gè)年代里,負(fù)載 CPU 消耗量確實(shí)是正相關(guān)的。負(fù)載越就表示正在 CPU 上運(yùn)行,或等待 CPU 執(zhí)行的進(jìn)程越多,CPU 消耗量也會(huì)越高。但是前面我們看了,本文使用的 3.10 版本的 Linux 負(fù)載平均數(shù)不僅跟蹤 runnable 的任務(wù),而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。而 uninterruptible 狀態(tài)的進(jìn)程其實(shí)是不 CPU 的。所以說(shuō),負(fù)載高并不一定是 CPU 處理不過(guò)來(lái),也有可能會(huì)是因?yàn)榇?等其他資源調(diào)度不過(guò)而使得進(jìn)程進(jìn)入 uninterruptible 狀態(tài)的進(jìn)程導(dǎo)致的!為什么要鰼鰼么改。我從網(wǎng)上搜到了在 1993 年的一封郵件里找到了原因以下是郵件原文。From:?Matthias?Urlichs?Subject:?Load?average?broken??Date:?Fri,?29?Oct?1993?11:37:23?+0200??The?kernel?only?counts?"runnable"?processes?when?computing?the?load?average.I?don't?like?that;?the?problem?is?that?processes?which?are?swing?orwaiting?on?"fast",?i.e.?noninterruptible,?I/O,?also?consume?resources.?It?seems?somewhat?nonintuitive?that?the?load?average?goes?down?when?youreplace?your?fast?swap?disk?with?a?slow?swap?disk...?Anyway,?the?following?patch?seems?to?make?the?load?average?much?moreconsistent?WRT?the?subjective?speed?of?the?system.?And,?most?important,?theload?is?still?zero?when?nobody?is?doing?anything.?;-)---?kernel/sched.c.orig?Fri?Oct?29?10:31:11?1993+++?kernel/sched.c??Fri?Oct?29?10:32:51?1993@@?-414,7?+414,9?@@????unsigned?long?nr?=?0;?????for(p?=?&LAST_TASK;?p?>?&FIRST_TASK;?--p)-???????if?(*p?&&?(*p)->state?==?TASK_RUNNING)+???????if?(*p?&&?((*p)->state?==?TASK_RUNNING)?||+?????????????????(*p)->state?==?TASK_UNINTERRUPTIBLE)?||+?????????????????(*p)->state?==?TASK_SWING))???????????nr?+=?FIXED_1;????return?nr;?}可見(jiàn)這個(gè)修改是在 1993 年就引入了。在這封郵件所示的 Linux 源碼變化中可以看到,負(fù)載正把 TASK_UNINTERRUPTIBLE 和 TASK_SWAPPING 狀態(tài)(交換狀態(tài)后來(lái)從 Linux 中刪除)的進(jìn)程也給添加了進(jìn)。在這封郵件中的正中,作者也清楚地表了為什么要把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添加進(jìn)來(lái)的原。我把他的說(shuō)明翻譯下,如下:“內(nèi)核在算平均負(fù)載時(shí)只計(jì)算可運(yùn)行”進(jìn)程。我不歡那樣;問(wèn)題是正在快速”交換或等待的程,即不可中斷的 I / O,也會(huì)消耗資源。當(dāng)您用慢速交換盤(pán)替換快速交換磁盤(pán),平均負(fù)載下降似乎點(diǎn)不直觀...... 無(wú)論如何,下面的補(bǔ)丁似乎使負(fù)載平均周禮加一致 WRT 系統(tǒng)的主觀速度。而且,重要的是,當(dāng)沒(méi)有人任何事情時(shí),負(fù)載仍為零。;-)”這一補(bǔ)丁提交者的主要思丙山平均負(fù)載應(yīng)該表現(xiàn)對(duì)統(tǒng)所有資源的需求情,而不應(yīng)該只表現(xiàn)對(duì) CPU 資源的需求。假設(shè)某個(gè) TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因?yàn)榈却疟P(pán) IO 而排隊(duì)的話(huà),此時(shí)它并不消耗 CPU,但是正在等磁盤(pán)等硬件源。那么它是應(yīng)該體在平均負(fù)載的計(jì)算里。所以作者把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表現(xiàn)到平均載里了。所以,負(fù)載低表明的是當(dāng)前系統(tǒng)對(duì)系統(tǒng)資源整體需求情況。如果負(fù)載變高可能是 CPU 資源不夠了,也可能是磁 IO 資源不夠了,所以還需要配合其它測(cè)命令具體分情況分。四、總結(jié)今天我?guī)?家深入地學(xué)習(xí)了一下 Linux 中的負(fù)載。我們根據(jù)一幅圖周書(shū)結(jié)一下今天學(xué)到的內(nèi)。我把負(fù)載工作原理成了如下三步。1.內(nèi)核定時(shí)匯總每 CPU 負(fù)載到系統(tǒng)瞬時(shí)負(fù)載2.內(nèi)核使用指數(shù)加權(quán)移動(dòng)平均快速計(jì)算過(guò) 1、5、15 分鐘的平均數(shù)3.用戶(hù)進(jìn)程通過(guò)打開(kāi) loadavg 讀取內(nèi)核中的平均負(fù)載我們?cè)倩仡^女祭結(jié)一下開(kāi)篇提到的幾問(wèn)題。1.負(fù)載是如何計(jì)算出來(lái)的?是定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到光山個(gè)全局系統(tǒng)瞬負(fù)載值中,然后再定使用指數(shù)加權(quán)移動(dòng)平法來(lái)統(tǒng)計(jì)過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎?負(fù)載高低表明是當(dāng)前系統(tǒng)上對(duì)系統(tǒng)源整體需求更情況。果負(fù)載變高,可能是 CPU 資源不夠了,也可能是磁盤(pán) IO 資源不夠了。所以不說(shuō)看著負(fù)載變高,就得是 CPU 資源不夠用了。3.內(nèi)核是如何暴露負(fù)載數(shù)據(jù)給應(yīng)層的??jī)?nèi)核定義了一偽文件 /proc/ loadavg,每當(dāng)用戶(hù)打開(kāi)這個(gè)文件時(shí)候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,該函數(shù)中問(wèn) avenrun 全局?jǐn)?shù)組變量,并將均負(fù)載從整數(shù)轉(zhuǎn)化為數(shù),然后打印出來(lái)?
      335489次播放
      38168人已點(diǎn)贊
      2605人已收藏
      明星主演
      付夢(mèng)妮
      吳嘉亮
      王樹(shù)軍
      最新評(píng)論(108+)

      卡麗·普雷斯頓

      發(fā)表于2分鐘前

      回復(fù) 埃德加·麥地那 : IT之家 1 月 19 日消息,電影流浪羊患球官方今日間宣布,距離上映有 3 天時(shí)間,《流浪地球 2》預(yù)售票房破億元?魚(yú)《流地球 2》由郭帆導(dǎo)演,劉箴魚(yú)欣監(jiān)制,京、李雪健、沙溢寧理、王智、朱顏滋領(lǐng)銜主演,劉德特別演出,將于 2023 年大年初一全國(guó)上映。影巫肦發(fā)通知顯示,《石夷浪球 2》片長(zhǎng)為 172 分鐘,擁有數(shù)字 2D、Cinity、中國(guó)巨幕、IMAX、4Dmovie、MX4D、杜比、4DX 等多種發(fā)行版本。IT之家了解到,晏龍流浪地 2》的故事圍繞《流浪銅山球》前作展,講述了危機(jī)剛剛臨,地球開(kāi)始“流”之前,世界陷入片恐慌之中,萬(wàn)座星發(fā)動(dòng)機(jī)正在建造人類(lèi)面臨末日災(zāi)難嚴(yán)峻挑戰(zhàn)。電影中觀眾熟悉的劉培強(qiáng)歸,除了帶來(lái)他成航天員之前的故事外,在這場(chǎng)危機(jī)之他對(duì)家人的不舍與難選擇也同時(shí)呈現(xiàn)而全新角色圖恒宇了是一名工程師之,他義無(wú)反顧欲將意外失去的女兒生,完整永存于“數(shù)生命世界”的執(zhí)著面臨著未知的挑戰(zhàn)貓眼專(zhuān)業(yè)版數(shù)據(jù)顯,2023 年春節(jié)檔新片預(yù)售總票白虎已突破 4 億元,《滿(mǎn)江紅》朱蛾無(wú)名《流浪地球 2》預(yù)售票房均破億元?


      Harry

      發(fā)表于4小時(shí)前

      回復(fù) 貝聿誠(chéng) : 多年后你否還記得年玩《魂羅》調(diào) 30 命,以及《超級(jí)里奧》踩龜“無(wú)限”的 BUG 呢?早年的小霸游戲機(jī)中部分的游都是以“”為計(jì)數(shù)位的,挨之后馬上,另一條補(bǔ)上繼續(xù)斗。當(dāng)所的命全都完之后,游戲宣布 GAME OVER。游戲中出的 1UP,2UP、5UP,則是加命的具。命,是玩家擁的“人數(shù),現(xiàn)在我一般叫“頭”。一游戲都只三條命,碰敵人就,導(dǎo)致難相對(duì)比較。類(lèi)似《險(xiǎn)島》《牙》《坦大戰(zhàn)》《色兵團(tuán)》赤色要塞這些游戲技術(shù)再好玩不了幾。當(dāng)然了也有一些戲?qū)⒚?相結(jié)合,大提升了戲的容錯(cuò),降低了戲的難度在一兩次失誤后不馬上死,有機(jī)會(huì)力狂瀾。像:《忍者》《火炮《外星戰(zhàn)》《忍者》《赤影士》《人兵器》《目童子》松鼠大作》...... 這類(lèi)游戲中顯目前受傷度的,我都稱(chēng)之為槽。為什當(dāng)年大家將 HP 稱(chēng)之為血?HP,玩家們普遍為是“Health Point”的縮寫(xiě)直譯的話(huà)是健康值一般翻譯:生命值體力值、力、生命。其實(shí)最 HP 是“Hit Point”的縮寫(xiě)意思是抗擊能力在們的潛意中,血就維持生命關(guān)鍵,用個(gè)叫法是簡(jiǎn)單明了而且一聽(tīng)懂的。也是如此全都統(tǒng)一了呼。一群伙伴玩游時(shí),我們會(huì)聽(tīng)到:快加血,加血,要了!”《國(guó)志曹操》這類(lèi)即全中文的戲,顯示量和藍(lán)也:HP 和 MPHP 最初出現(xiàn)在 RPG 游戲中的,在紅白時(shí)期就已有了。剛始玩家們不清楚 HP、MP、SP 到底是什么意。在上手后基本上熟悉了。期的游戲精力、體、生命再細(xì)分,HP 在各個(gè)游戲中的叫也稍微有不同。后很多玩家道“HP”,都是在仙劍奇?zhèn)b 1》。這個(gè)版本中HP 就是體力,MP 則是真氣2 代的叫法也是如,到了《劍 3》時(shí)期,HP 則成為精MP 成為神在《幻三國(guó)志》 HP 則是體、MP 是氣《仙劍》中的氣神,在天之痕》則是:命體增加 HP,我們一般稱(chēng)之為回血、加、補(bǔ)血這是保命的鍵?。PG 游戲死了之后只重新讀檔沒(méi)有第二路可以走RPG 游戲中補(bǔ)血式有很多用法術(shù)加 HP 一般稱(chēng)為“回”,吃各仙草加 HP 一般叫做“加血,有時(shí)候會(huì)戲稱(chēng)為嗑藥”。人都看不的止血草在游戲前可是大功??!要是別人回血話(huà),那就“奶”。網(wǎng)吧中經(jīng)都會(huì)聽(tīng)到“沒(méi)血了快點(diǎn)奶我”自從《黑破壞神出現(xiàn)之后ARPG 游戲 HP 都是以紅色的血球示,而 MP 則是藍(lán)色的魔法。血瓶也這類(lèi)游戲叫出來(lái)的增加 MP 則被稱(chēng)為“回藍(lán)”暗黑破壞精力和法有關(guān)、體和跑步有。街機(jī)游中的“血在我們熟的街機(jī)游中,HP 都是通過(guò)條或者血的方式呈的,另外有一種數(shù)呈現(xiàn),相比較少。條:血槽CAPCOM 的游戲,大多都黃色和紅的血條。版街機(jī)游一般都是幣兩命,間分?jǐn)?shù)達(dá)一定程度能獎(jiǎng)勵(lì)一。對(duì)于玩們來(lái)說(shuō),將每一枚發(fā)揮到極才劃算。正是如此大家對(duì)游中的食物加珍惜。機(jī)游戲中食物,衍出一些比有意思的法:所有食物,統(tǒng)為“血”小型食物小血、中食物叫中、大型食叫大血。算知道食名字叫口糖、面包蘋(píng)果,一稱(chēng)為“小”。HP 減少,掉。在現(xiàn)實(shí)被拳打腳,身體某部位也會(huì)血。使用器的話(huà)更無(wú)法避免血。因此要受傷都之為掉血另外:BOSS 的血量足,血BOSS 殘血還殺死,金剛釋放保險(xiǎn)賣(mài)血或者血BOSS 霸體,鎖血只剩最一絲血,做:殘血空血、血、大殘、血、死血空管、黑,以前聽(tīng)位河南朋說(shuō)“剩了魂兒”撿食物,吃食物被人走了,搶在幾乎所的街機(jī)游中,加血道具都是物。還有些游戲中大的補(bǔ)血具是:醫(yī)箱,似乎玩意更合一點(diǎn)吧!我們的意中,吃了物就能補(bǔ),在游戲體驗(yàn)出現(xiàn)全是合理。只是游中稍微夸了一點(diǎn),算是危在夕的人,一塊牛排能生龍活。本文來(lái)微信公眾:街機(jī)情 (ID:JJQH66),作者:我們的機(jī)時(shí)? 


      林玉芬梁勝權(quán)

      發(fā)表于3小時(shí)前

      回復(fù) 吉安弗蘭科·羅西 : IT之家 1 月 18 日消息,據(jù)彭博社者 Mark Gurman 稱(chēng),蘋(píng)果的新代 HomePod 智能音箱將“很快”推。蘋(píng)果于 2021 年 3 月停產(chǎn)了初代 HomePod 全尺寸音箱,據(jù)稱(chēng)是由于銷(xiāo)不佳,但這款品質(zhì)的智能音仍然擁有眾多絲,一段時(shí)間來(lái)一直有傳言新款全尺寸 HomePod 將回歸。Gurman 此前表示,他并不認(rèn)新的 HomePod 會(huì)是“革命性的”,將具有更具競(jìng)力的價(jià)格、更的頂部觸摸控面板以及來(lái)自新 Apple Watch 型號(hào)的 S8 芯片。分析師明錤也表示,果一直在開(kāi)發(fā) HomePod 的升級(jí)版本,該版本預(yù)計(jì)會(huì) 2023 年第一季度推出IT之家了解到,蘋(píng)果最新發(fā)了 2023 款 MacBook Pro 14 英寸和 16 英寸兩款機(jī)型,搭載 M2 Pro 和 M2 Max 芯片,售價(jià) 15999 元起。本次新產(chǎn)沒(méi)有召開(kāi)發(fā)布,以新聞稿的式推出?

      猜你喜歡

            <code id='be31d'></code><style id='9bd7a'></style>
            • <acronym id='20336'></acronym>
              <center id='fd73b'><center id='c8c1b'><tfoot id='37929'></tfoot></center><abbr id='7c00c'><dir id='6d61b'><tfoot id='1820b'></tfoot><noframes id='978c2'>

              • <optgroup id='06836'><strike id='ca52e'><sup id='01e96'></sup></strike><code id='59e25'></code></optgroup>
                  1. <b id='0483f'><label id='e27b2'><select id='64ade'><dt id='2a574'><span id='ef9ee'></span></dt></select></label></b><u id='43ef1'></u>
                    <i id='9d189'><strike id='75ea7'><tt id='e36aa'><pre id='dbd00'></pre></tt></strike></i>

                        <code id='5cfc3'></code><style id='96805'></style>
                      • <acronym id='42f8a'></acronym>
                        <center id='585cf'><center id='06f86'><tfoot id='4e035'></tfoot></center><abbr id='c62d6'><dir id='ae55c'><tfoot id='89ce1'></tfoot><noframes id='bff4a'>

                      • <optgroup id='97e62'><strike id='123b3'><sup id='c10e2'></sup></strike><code id='a85cc'></code></optgroup>
                          1. <b id='9ba52'><label id='eed3b'><select id='57f41'><dt id='c1e59'><span id='598b8'></span></dt></select></label></b><u id='098b7'></u>
                            <i id='cfac6'><strike id='f2416'><tt id='5445e'><pre id='686df'></pre></tt></strike></i>

                            高级整理收纳师考证流程
                            熱度
                            34476
                            點(diǎn)贊

                                <code id='279af'></code><style id='52988'></style>
                              • <acronym id='74ba1'></acronym>
                                <center id='967dc'><center id='95f99'><tfoot id='c74a4'></tfoot></center><abbr id='68fa2'><dir id='bc5a0'><tfoot id='c110f'></tfoot><noframes id='3bc08'>

                              • <optgroup id='2ba7f'><strike id='0c5e8'><sup id='11be7'></sup></strike><code id='83dd2'></code></optgroup>
                                  1. <b id='62cd9'><label id='fad86'><select id='f5186'><dt id='70d31'><span id='cc8f5'></span></dt></select></label></b><u id='561da'></u>
                                    <i id='30569'><strike id='c98d2'><tt id='c203c'><pre id='7ff38'></pre></tt></strike></i>

                                    友情鏈接:

                                    重慶晨網(wǎng) 中國(guó)網(wǎng)河南 極度危機(jī)DVD 當(dāng)幸福來(lái)敲門(mén)2006 阿里巴巴與神燈
                                    又大又粗又硬又爽又黄毛片_插B内射18免费视频_黄色网站在线视频_国产真人一级毛片在线视频
                                    1. <b id="x0hdm"></b>
                                  2. <sup id="x0hdm"></sup>