0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

容器進(jìn)程調(diào)度時(shí)是該優(yōu)先考慮CPU資源還是內(nèi)存資源

冬至配餃子 ? 來(lái)源:開發(fā)內(nèi)功修煉 ? 作者:張彥飛allen ? 2022-08-16 18:20 ? 次閱讀

問(wèn)題是這樣的:有 A B 兩臺(tái)服務(wù)器,其中 A 服務(wù)器 cpu 快滿了,內(nèi)存很空閑。另外一臺(tái) B 服務(wù)器 cpu 很空閑,但內(nèi)存快滿了?,F(xiàn)在 k8s 有一個(gè)新的任務(wù)要調(diào)度,請(qǐng)問(wèn)應(yīng)該選擇哪臺(tái)服務(wù)器?這其實(shí)是現(xiàn)在非常火的 k8s 的經(jīng)典應(yīng)用場(chǎng)景。

有的同學(xué)看到這個(gè)問(wèn)題后的第一個(gè)想法是應(yīng)該先評(píng)估一下新任務(wù)是計(jì)算密集型的業(yè)務(wù)還是 io 密集型的。然后再?zèng)Q定往哪個(gè)機(jī)器上調(diào)度。這么思考倒是也不能算錯(cuò),只不過(guò)是沒有抓到問(wèn)題的關(guān)鍵點(diǎn)上。

這個(gè)問(wèn)題的關(guān)鍵點(diǎn)是在于要思考一下調(diào)度到某個(gè)機(jī)器上可能會(huì)出現(xiàn)什么問(wèn)題。

1. 調(diào)度到 CPU 比較滿的 A 服務(wù)器

假設(shè)我們調(diào)度到 CPU 比較滿的 A 機(jī)器上會(huì)出現(xiàn)什么狀況呢?因?yàn)?CPU 資源是分時(shí)來(lái)調(diào)度的,每個(gè)進(jìn)程都會(huì)得到一些時(shí)間片進(jìn)行執(zhí)行。所以 A 機(jī)器上不管 CPU 有多忙,再加一個(gè)的進(jìn)程來(lái)運(yùn)行話其實(shí)影響無(wú)非就是所有的進(jìn)程都運(yùn)行的更慢了一些。再換個(gè)說(shuō)法,就是 CPU 資源是可以超賣的,是屬于可壓縮資源。

這里提一下,部分讀者反饋說(shuō)自己的云虛機(jī)在 CPU 飆升到 100% 的時(shí)候,云廠商為了保護(hù)主機(jī),直接宕機(jī)。這種情況在各大公司的 IDC 機(jī)房?jī)?nèi)不太可能出現(xiàn),所以這種情況咱們暫時(shí)不考慮。

2. 調(diào)度到內(nèi)存比較滿的 B 服務(wù)器

再假設(shè)我們調(diào)度到內(nèi)存比較滿的 B 機(jī)器上會(huì)出現(xiàn)什么狀況呢?不知道你有沒有遭遇過(guò)線上進(jìn)程被 oom kill 掉的場(chǎng)景。這種情況下就是當(dāng)機(jī)器物理內(nèi)存不是很充足的時(shí)候,如果申請(qǐng)的內(nèi)存過(guò)大,操作系統(tǒng)就可能會(huì)挑選在運(yùn)行的一些進(jìn)程將其殺掉。

這里稍微展開說(shuō)一下,操作系統(tǒng)選擇要?dú)⒌舻倪M(jìn)程也不一定是內(nèi)存消耗最多的服務(wù)。而是會(huì)綜合內(nèi)存消耗和進(jìn)程的 oom_score_adj(可配置) 值來(lái)進(jìn)行選擇。在一些在離線混部的服務(wù)器上,往往會(huì)將在線服務(wù)進(jìn)程的被殺的優(yōu)先級(jí)調(diào)的低一些,離線服務(wù)進(jìn)程的被殺優(yōu)先級(jí)調(diào)高。這樣充分保障在線服務(wù)的穩(wěn)定運(yùn)行。

先不考慮在離線混部的情況,假設(shè)都是在線服務(wù),那么無(wú)論哪一個(gè)服務(wù)的進(jìn)程被 Linux 給 oom kill掉影響都是非常大的。還得重新調(diào)度,而且還有可能影響服務(wù)的穩(wěn)定性,以及接口的正確返回。

這里有的同學(xué)可能會(huì)說(shuō),Linux 上不是支持將內(nèi)存 swap 到磁盤上嗎?但其實(shí)在線上服務(wù)器中,由于磁盤的性能比內(nèi)存低太多了,所以大部分的線上服務(wù)器都不會(huì)開啟 swap 這個(gè)特性。因?yàn)榉?wù)的內(nèi)存一旦被 swap 到內(nèi)存,即使是能運(yùn)行,性能也會(huì)有急劇的下降。所以一般不怎么會(huì)開啟。

結(jié)論

所以對(duì)比來(lái)看,新任務(wù)在調(diào)度的時(shí)候應(yīng)該優(yōu)先選擇 A 服務(wù)器,因?yàn)樗目臻e內(nèi)存比較多,不太可能出現(xiàn)進(jìn)程被殺死的情況。雖然它的 CPU 比較滿,但所有的服務(wù)仍然可以運(yùn)行。

在實(shí)際中,k8s 的 API Server接受客戶端提交Pod對(duì)象創(chuàng)建請(qǐng)求后的操作過(guò)程中,有一個(gè)重要的步驟就是由調(diào)度器程序kube-scheduler從當(dāng)前集群中選擇一個(gè)可用的最佳節(jié)點(diǎn)來(lái)接收并運(yùn)行它。

當(dāng)然實(shí)際中 k8s 的調(diào)度策略不是這么簡(jiǎn)單的,系統(tǒng)默認(rèn)的 kube-scheduler 調(diào)度器外還有直接指定Node主機(jī)名、節(jié)點(diǎn)親和性、Pod親和性、nodeSelector 等等調(diào)度策略。

就單拿系統(tǒng)默認(rèn)的 kube-scheduler 調(diào)度器來(lái)說(shuō)的話,還會(huì)綜合考慮單獨(dú)和整體的資源請(qǐng)求、硬件/軟件/策略限制、親和以及反親和要求、數(shù)據(jù)局域性、負(fù)載間的干擾等等這些因素對(duì)可調(diào)度節(jié)點(diǎn)打分,然后選出其中得分最高的 Node 來(lái)運(yùn)行 Pod。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10781

    瀏覽量

    210536
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8874

    瀏覽量

    84984
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6623

    瀏覽量

    123049
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    588

    瀏覽量

    27274
  • SWAP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    12761
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何限制容器可以使用的CPU資源

    默認(rèn)情況下容器可以使用的主機(jī) CPU 資源是不受限制的。和內(nèi)存資源的使用一樣,如果不對(duì)容器可以使
    的頭像 發(fā)表于 10-24 17:04 ?79次閱讀
    如何限制<b class='flag-5'>容器</b>可以使用的<b class='flag-5'>CPU</b><b class='flag-5'>資源</b>

    云服務(wù)器的購(gòu)買資源和擴(kuò)容資源的區(qū)別和聯(lián)系

    服務(wù)商處直接購(gòu)買一定量的計(jì)算資源,如CPU內(nèi)存或存儲(chǔ)空間等。而擴(kuò)容資源則是指在現(xiàn)有的云服務(wù)器基礎(chǔ)上增加額外的資源
    的頭像 發(fā)表于 10-18 11:21 ?111次閱讀

    深入探討Linux的進(jìn)程調(diào)度

    Linux操作系統(tǒng)作為一個(gè)開源且廣泛應(yīng)用的操作系統(tǒng),其內(nèi)核設(shè)計(jì)包含了許多核心功能,而進(jìn)程調(diào)度器(Scheduler)就是其中一個(gè)至關(guān)重要的模塊。進(jìn)程調(diào)度器負(fù)責(zé)決定在任何給定的時(shí)刻哪個(gè)
    的頭像 發(fā)表于 08-13 13:36 ?861次閱讀
    深入探討Linux的<b class='flag-5'>進(jìn)程</b><b class='flag-5'>調(diào)度</b>器

    線程是什么的基本單位 進(jìn)程與線程的本質(zhì)區(qū)別

    線程是操作系統(tǒng)中處理器調(diào)度的基本單位,它代表著獨(dú)立的執(zhí)行流。在一個(gè)進(jìn)程中,可以包含多個(gè)線程,這些線程共享相同的進(jìn)程資源,如內(nèi)存空間、文件描述
    的頭像 發(fā)表于 02-02 16:30 ?786次閱讀

    線程、進(jìn)程、多線程、多進(jìn)程和多任務(wù)之間有何關(guān)系?

    進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到課中程度的數(shù)據(jù)結(jié)構(gòu)的匯集。從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源CPU時(shí)間、內(nèi)存
    的頭像 發(fā)表于 01-11 13:39 ?319次閱讀
    線程、<b class='flag-5'>進(jìn)程</b>、多線程、多<b class='flag-5'>進(jìn)程</b>和多任務(wù)之間有何關(guān)系?

    mcu線程和進(jìn)程的區(qū)別是什么

    是程序執(zhí)行的基本單位,它是進(jìn)程中的一個(gè)實(shí)體,是進(jìn)程內(nèi)的一條執(zhí)行路徑。線程是CPU調(diào)度的最小單位,它可以看作是輕量級(jí)的進(jìn)程,不擁有獨(dú)立的地址空
    的頭像 發(fā)表于 01-04 10:45 ?640次閱讀

    DshanMCU-R128s2啟動(dòng)與資源劃分

    固件、協(xié)議棧、驅(qū)動(dòng)、休眠喚醒、安全啟動(dòng)、安全控制 C906 應(yīng)用核。運(yùn)行大部分驅(qū)動(dòng)與主要應(yīng)用,控制臺(tái) HIFI5 算法核。運(yùn)行音頻相關(guān)驅(qū)動(dòng)與算法 內(nèi)存配置 R128 方案目前三個(gè)核 OS 運(yùn)行的地址范圍如下表。 這只是默認(rèn)配置方案,CPU
    的頭像 發(fā)表于 12-22 17:46 ?597次閱讀
    DshanMCU-R128s2啟動(dòng)與<b class='flag-5'>資源</b>劃分

    英偉達(dá)表示優(yōu)先考慮日本對(duì)GPU的需求

    在東京首相岸田文雄官邸舉行的新聞發(fā)布會(huì)上,黃強(qiáng)調(diào)了異常高的市場(chǎng)需求,他表示:“需求非常高,但我向首相保證,我們將盡最大努力優(yōu)先考慮日本對(duì) GPU 的需求”。
    發(fā)表于 12-08 10:37 ?323次閱讀

    docker內(nèi)存不足的解決辦法

    內(nèi)存CPU。通過(guò)這個(gè)命令,我們可以發(fā)現(xiàn)哪個(gè)容器占用了大量的內(nèi)存資源。 調(diào)整Docker守護(hù)進(jìn)程
    的頭像 發(fā)表于 11-23 10:41 ?2402次閱讀

    進(jìn)程進(jìn)入等待狀態(tài)有哪幾種方式

    文件讀寫、網(wǎng)絡(luò)通信等I/O操作時(shí),必須等待I/O設(shè)備的響應(yīng),進(jìn)入阻塞等待狀態(tài)。一旦I/O完成,進(jìn)程將從阻塞狀態(tài)恢復(fù)到就緒狀態(tài)。 等待資源:如果進(jìn)程需要使用某種資源(如共享
    的頭像 發(fā)表于 11-17 11:19 ?1912次閱讀

    基于FreeRTOS的STM32F103系統(tǒng)—內(nèi)存管理及任務(wù)調(diào)度

    雖然現(xiàn)在的單片機(jī)系統(tǒng),CPU資源并不是那么緊缺了,也有豐富的內(nèi)存空間,但是我們還是要積極地實(shí)現(xiàn)內(nèi)存管理,這可以幫我們減少
    的頭像 發(fā)表于 11-13 11:08 ?1387次閱讀
    基于FreeRTOS的STM32F103系統(tǒng)—<b class='flag-5'>內(nèi)存</b>管理及任務(wù)<b class='flag-5'>調(diào)度</b>

    linux下開發(fā)避免僵尸進(jìn)程的方法

    一、什么是僵死進(jìn)程? 一般情況下,程序調(diào)用exit(包括_exit和_Exit,它們的區(qū)別這里不做解釋),它的絕大多數(shù)內(nèi)存和相關(guān)的資源已經(jīng)被內(nèi)核釋放掉,但是在進(jìn)程表中這個(gè)
    的頭像 發(fā)表于 11-11 16:38 ?665次閱讀
    linux下開發(fā)避免僵尸<b class='flag-5'>進(jìn)程</b>的方法

    什么是Linux進(jìn)程調(diào)度

    )。調(diào)度器使得我們同時(shí)執(zhí)行多個(gè)程序成為可能,因此可以與具有各種需求的用戶共享CPU。 內(nèi)核必須提供一種方法, 在各個(gè)進(jìn)程之間盡可能公平地共享CPU時(shí)間, 而同時(shí)又要
    的頭像 發(fā)表于 11-09 09:05 ?520次閱讀
    什么是Linux<b class='flag-5'>進(jìn)程</b><b class='flag-5'>調(diào)度</b>器

    關(guān)于Python多進(jìn)程和多線程詳解

    進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進(jìn)程和多線程,教科書上最經(jīng)典的一句話是“進(jìn)程資源分配的最小單位,線程是
    的頭像 發(fā)表于 11-06 14:46 ?756次閱讀
    關(guān)于Python多<b class='flag-5'>進(jìn)程</b>和多線程詳解

    ARM工控機(jī):提升交通運(yùn)輸資源調(diào)度與管理

    鋇錸技術(shù)ARM工控機(jī):提升交通運(yùn)輸資源調(diào)度與管理
    的頭像 發(fā)表于 10-31 20:20 ?370次閱讀
    ARM工控機(jī):提升交通運(yùn)輸<b class='flag-5'>資源</b><b class='flag-5'>調(diào)度</b>與管理