最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

當(dāng)Linux內(nèi)存耗盡時(shí),怎么解決?

2022-06-16 20:02 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿
  • 當(dāng)內(nèi)存不足時(shí)會(huì)發(fā)生什么,結(jié)果很簡單,linux的內(nèi)存用完了,無法申請(qǐng)緩沖區(qū),內(nèi)核會(huì)挑選進(jìn)程將其殺死,一般情況下,殺死正在申請(qǐng)內(nèi)存的程序。頻繁的進(jìn)行磁盤swap操作,經(jīng)常會(huì)出現(xiàn)這類問題,或是并發(fā)處理時(shí)啟動(dòng)的進(jìn)程數(shù)過多。

  • 出現(xiàn)內(nèi)存耗盡的原因很簡單,你申請(qǐng)的內(nèi)存大小,超過了可用的虛擬內(nèi)存的大小,注意是虛擬內(nèi)存(內(nèi)存并不是唯一的,交換分區(qū)也可以提供內(nèi)存)

  • 探究oom(out of memory)

  • 首先運(yùn)行下面的程序,不斷申請(qǐng)大量內(nèi)存:

上面的程序運(yùn)行一會(huì)就會(huì)出現(xiàn)oom,現(xiàn)在運(yùn)行另外一個(gè)程序,不斷申請(qǐng)內(nèi)存,并且將其填充1。

  • 有發(fā)現(xiàn)不同嗎,事實(shí)上程序1可以比程序2申請(qǐng)更多的內(nèi)存。兩個(gè)程序退出的原因都是因?yàn)榭臻g不夠了,然而程序1的退出時(shí)因?yàn)閙alloc的失敗,而程序2的退出則是因?yàn)閮?nèi)核所謂的oom killer 將其殺死了。

  • 程序2退出的時(shí)候:

Currently allocatinn 1589 MB

  • 程序1退出的時(shí)候:

Currently allocating 274520 MB(64位系統(tǒng))

  • 為什么程序1相較程序2可以多分配如此多的內(nèi)存,這是因?yàn)閘inux采用了延遲的頁面分配。也就是說內(nèi)存只有在真正用的時(shí)候才進(jìn)行分配,這種技術(shù)被稱為optimistic memory allocation。

  • 查看/proc/pid/status文件就可以知道這個(gè)情況。(其中vmdata是所占用的虛擬內(nèi)存)

  • 首先是程序1:


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)? ? ? ??

  • 然后是程序2:



  • 當(dāng)我們請(qǐng)求一個(gè)內(nèi)存區(qū)時(shí),c庫會(huì)判斷當(dāng)前預(yù)分配的內(nèi)存塊是否足夠大,如果不夠,程序會(huì)通過擴(kuò)展堆空間的方式來獲取內(nèi)存。

  • 查看文件/proc/pid/maps可以看到堆里的內(nèi)存塊。



  • 在內(nèi)存用盡的時(shí)候oom killer會(huì)依據(jù)策略挑選需要?dú)⑺赖倪M(jìn)程進(jìn)行kill操作,策略是可以配置的。每個(gè)進(jìn)程的oom_score是動(dòng)態(tài)變化的,越大越可能被殺死。

  • 通過查看/proc/pid/oom_score 可以知曉該進(jìn)程的值。一般來說占用內(nèi)存越多的值越高,運(yùn)行時(shí)間越早的值越小。



  • 同時(shí)在系統(tǒng)里面有些相對(duì)重要的進(jìn)程可能會(huì)得到較高的值,這個(gè)時(shí)候可以使用/proc/pid/oom_adj文件。把里面的數(shù)值設(shè)置為整數(shù),這個(gè)進(jìn)程就越有可能被殺掉,相反設(shè)置為負(fù)數(shù),就越有機(jī)會(huì)存活。當(dāng)這個(gè)值為-17,oom-killer就會(huì)完全忽略這個(gè)進(jìn)程。

  • 當(dāng)然這種方式不容易實(shí)現(xiàn)和管理,有其他編寫代碼管理oom-killer的方法。

  • 如果系統(tǒng)有日志的話,killer的日志會(huì)保存到

grep -i kill /var/log/messages* 依據(jù)這個(gè)日志,可以調(diào)整策略,保證重要進(jìn)程的正常運(yùn)行,例如數(shù)據(jù)庫和web服務(wù)。 oom-killer的代碼位于mm/oom_kill.c 其調(diào)用的順序是malloc -> _alloc_pages -> out_of_memory() -> select_bad_process() -> badness()




當(dāng)Linux內(nèi)存耗盡時(shí),怎么解決?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
邛崃市| 金川县| 闻喜县| 张北县| 偏关县| 蕲春县| 深水埗区| 丰都县| 福鼎市| 安塞县| 淄博市| 古丈县| 临城县| 黑山县| 扶余县| 迁西县| 专栏| 黑水县| 扶风县| 来宾市| 霞浦县| 彭山县| 仁寿县| 车致| 灌阳县| 肇源县| 股票| 潞城市| 东莞市| 阿克| 北流市| 鲁山县| 冀州市| 文安县| 车险| 洛宁县| 营山县| 辽中县| 黄梅县| 紫云| 嘉荫县|