0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(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)源:開(kā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)存快滿了。現(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ò)是沒(méi)有抓到問(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)什么狀況呢?不知道你有沒(méi)有遭遇過(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)程將其殺掉。

這里稍微展開(kāi)說(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 到磁盤(pán)上嗎?但其實(shí)在線上服務(wù)器中,由于磁盤(pán)的性能比內(nèi)存低太多了,所以大部分的線上服務(wù)器都不會(huì)開(kāi)啟 swap 這個(gè)特性。因?yàn)榉?wù)的內(nèi)存一旦被 swap 到內(nèi)存,即使是能運(yùn)行,性能也會(huì)有急劇的下降。所以一般不怎么會(huì)開(kāi)啟。

結(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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

    文章

    10813

    瀏覽量

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

    關(guān)注

    12

    文章

    8979

    瀏覽量

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

    關(guān)注

    37

    文章

    6698

    瀏覽量

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

    關(guān)注

    4

    文章

    590

    瀏覽量

    27322
  • SWAP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    12782
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文搞懂Linux進(jìn)程的睡眠和喚醒

    的代碼和數(shù)據(jù),進(jìn)而去執(zhí)行這個(gè)進(jìn)程。下面列舉了一些進(jìn)程狀態(tài): 注意:沒(méi)有+時(shí),默認(rèn)是后臺(tái)進(jìn)程 進(jìn)程調(diào)度
    發(fā)表于 11-04 15:15

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

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

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

    Linux操作系統(tǒng)作為一個(gè)開(kāi)源且廣泛應(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 ?881次閱讀
    深入探討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 ?825次閱讀

    鴻蒙原生應(yīng)用/元服務(wù)開(kāi)發(fā)-延遲任務(wù)說(shuō)明(一)

    WORK_SCHEDULER資源,擴(kuò)展單次回調(diào)運(yùn)行時(shí)長(zhǎng),擴(kuò)展后在充電狀態(tài)下為20分鐘,非充電狀態(tài)下為10分鐘。 調(diào)度延遲:系統(tǒng)會(huì)根據(jù)內(nèi)存、功耗、設(shè)備溫度、用戶使用習(xí)慣等統(tǒng)一調(diào)度,如當(dāng)系
    發(fā)表于 01-16 14:57

    線程、進(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 ?333次閱讀
    線程、<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 ?666次閱讀

    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 ?620次閱讀
    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 ?330次閱讀

    Linux是如何對(duì)容器下的進(jìn)程進(jìn)行CPU限制的,底層是如何工作的?

    現(xiàn)在很多公司的服務(wù)都是跑在容器下,我來(lái)問(wèn)幾個(gè)容器 CPU 相關(guān)的問(wèn)題,看大家對(duì)天天在用的技術(shù)是否熟悉。
    的頭像 發(fā)表于 11-29 14:31 ?1301次閱讀
    Linux是如何對(duì)<b class='flag-5'>容器</b>下的<b class='flag-5'>進(jìn)程</b>進(jìn)行<b class='flag-5'>CPU</b>限制的,底層是如何工作的?

    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 ?2473次閱讀

    一種提升存儲(chǔ)資源利用率的方法

    和帶寬。為了提高云平臺(tái)中的資源效率,供應(yīng)商提供可驅(qū)逐的虛擬機(jī)(即Spot VMs或Harvest VMs)。這些可驅(qū)逐的虛擬機(jī)允許用戶以低優(yōu)先級(jí)使用未分配的資源,也就是說(shuō),可驅(qū)逐的虛擬機(jī)的資源
    的頭像 發(fā)表于 11-21 10:15 ?813次閱讀
    一種提升存儲(chǔ)<b class='flag-5'>資源</b>利用率的方法

    iSulad Sandbox API簡(jiǎn)化容器調(diào)用鏈

    Kubernetes 的最小編排調(diào)度單元 Pod Sandbox 實(shí)際上是一個(gè)沙箱,為其中的容器提供了資源共享和安全隔離的運(yùn)行環(huán)境。
    的頭像 發(fā)表于 11-20 17:08 ?591次閱讀
    iSulad Sandbox API簡(jiǎn)化<b class='flag-5'>容器</b>調(diào)用鏈

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

    文件讀寫(xiě)、網(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 ?2041次閱讀