主頁 > 知識(shí)庫 > Linux中使用cgroups控制內(nèi)存資源介紹

Linux中使用cgroups控制內(nèi)存資源介紹

熱門標(biāo)簽:濟(jì)南智能語音電銷機(jī)器人加盟 河南語音電銷機(jī)器人加盟公司 無錫ai智能語音電銷機(jī)器人廠家 江西意向度高的羿智云外呼系統(tǒng) 抖音商家地圖標(biāo)注入駐店 如何找電銷機(jī)器人 無錫真人電銷機(jī)器人供應(yīng)商 易聯(lián)系統(tǒng)外呼營(yíng)銷來回呼 電銷機(jī)器人怎么打卡

cgroups 中有個(gè) memory 子系統(tǒng),用于限制和報(bào)告進(jìn)程的內(nèi)存使用情況。

其中,很明顯有兩組對(duì)應(yīng)的文件,一組帶 memsw ,另一組不帶

復(fù)制代碼
代碼如下:

memory.failcnt
memory.limit_in_bytes
memory.max_usage_in_bytes
memory.usage_in_bytes/p> p>memory.memsw.failcnt
memory.memsw.limit_in_bytes
memory.memsw.max_usage_in_bytes
memory.memsw.usage_in_bytes

帶 memsw 的表示虛擬內(nèi)存,即物理內(nèi)存加交換區(qū)。不帶 memsw 的那組僅包括物理內(nèi)存。其中,limit_in_bytes 是用來限制內(nèi)存使用的,其他的則是統(tǒng)計(jì)報(bào)告。

復(fù)制代碼
代碼如下:

# echo 10485760 >/sys/fs/cgroup/memory/foo/memory.limit_in_bytes

即可限制該組中的進(jìn)程使用的物理內(nèi)存總量不超過 10MB。對(duì) memory.memsw.limit_in_bytes 來說,則是限制虛擬內(nèi)存使用。memory.memsw.limit_in_bytes 必須大于或等于 memory.limit_in_byte。這些值還可以用更方便的 100M,20G 這樣的形式來設(shè)置。要解除限制,就把這個(gè)值設(shè)為 -1 即可。

這種方式限制進(jìn)程內(nèi)存占用會(huì)有個(gè)風(fēng)險(xiǎn)。當(dāng)進(jìn)程試圖占用的內(nèi)存超過限制,訪問內(nèi)存時(shí)發(fā)生缺頁,又沒有足夠的非活動(dòng)內(nèi)存頁可以換出時(shí)會(huì)觸發(fā) oom ,導(dǎo)致進(jìn)程直接被殺,從而造成可用性問題。即使關(guān)閉控制組的 oom killer,進(jìn)程在內(nèi)存不足的時(shí)候,雖然不會(huì)被殺,但是會(huì)長(zhǎng)時(shí)間進(jìn)入 D (等待系統(tǒng)調(diào)用的不可中斷休眠)狀態(tài),無法繼續(xù)執(zhí)行,導(dǎo)致仍然無法服務(wù)。因此,我認(rèn)為,用 memory.limit_in_bytes 或 memory.memsw.limit_in_bytes 限制進(jìn)程內(nèi)存占用僅應(yīng)當(dāng)作為一個(gè)保險(xiǎn),避免在進(jìn)程異常時(shí)耗盡系統(tǒng)資源。如,預(yù)期一組進(jìn)程最多只會(huì)消耗 1G 內(nèi)存,那么可以設(shè)置為 1.4G 。這樣在發(fā)生內(nèi)存泄露等異常情況時(shí),可以避免造成更嚴(yán)重問題。

在 memory 子系統(tǒng)中,還有一個(gè) memory.soft_limit_in_bytes 。和 memory.limit_in_bytes 的差異是,這個(gè)限制并不會(huì)阻止進(jìn)程使用超過限額的內(nèi)存,只是在系統(tǒng)內(nèi)存不足時(shí),會(huì)優(yōu)先回收超過限額的進(jìn)程占用的內(nèi)存,使之向限定值靠攏。

前面說控制組的 oom killer 是可以關(guān)閉的,就是通過 memory.oom_control 來實(shí)現(xiàn)的。cat memory.oom_control 可以看到當(dāng)前設(shè)置以及目前是否觸發(fā)了 oom 。echo 1 >memory.oom_control 就可以禁用 oom killer。

usage_in_bytes、max_usage_in_bytes、failcnt 則分別對(duì)應(yīng) 當(dāng)前使用量,最高使用量和發(fā)生的缺頁次數(shù)。

memory 子系統(tǒng)中還有一個(gè)很重要的設(shè)置是 memory.use_hierarchy 這是個(gè)布爾開關(guān),默認(rèn)為 0。此時(shí)不同層次間的資源限制和使用值都是獨(dú)立的。當(dāng)設(shè)為 1 時(shí),子控制組進(jìn)程的內(nèi)存占用也會(huì)計(jì)入父控制組,并上溯到所有 memory.use_hierarchy = 1 的祖先控制組。這樣一來,所有子孫控制組的進(jìn)程的資源占用都無法超過父控制組設(shè)置的資源限制。同時(shí),在整個(gè)樹中的進(jìn)程的內(nèi)存占用達(dá)到這個(gè)限制時(shí),內(nèi)存回收也會(huì)影響到所有子孫控制組的進(jìn)程。這個(gè)值只有在還沒有子控制組時(shí)才能設(shè)置。之后在其中新建的子控制組默認(rèn)的 memory.use_hierarchy 也會(huì)繼承父控制組的設(shè)置。

memory.swappiness 則是控制內(nèi)核使用交換區(qū)的傾向的。值的范圍是 0 – 100。值越小,越傾向使用物理內(nèi)存。設(shè)為 0 時(shí),只有在物理內(nèi)存不足時(shí)才會(huì)使用交換區(qū)。默認(rèn)值是系統(tǒng)全局設(shè)置: /proc/sys/vm/swappiness 。

memory.stat 就是內(nèi)存使用情況報(bào)告了。包括當(dāng)前資源總量、使用量、換頁次數(shù)、活動(dòng)頁數(shù)量等等。

標(biāo)簽:宿州 濱州 亳州 綏化 常德 河源 保山 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux中使用cgroups控制內(nèi)存資源介紹》,本文關(guān)鍵詞  Linux,中,使用,cgroups,控制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux中使用cgroups控制內(nèi)存資源介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux中使用cgroups控制內(nèi)存資源介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章