Linux 內存管理與系統架構設計

  • Linux 提供各種模式(比如,消息隊列),但是最著名的是 POSIX 共享內存(shmem,shared memory)。
    • Linux provides a variety of schemes (such as message queues), but most notable is POSIX shared memory (shmem).

1. memory overcommit 與內存管理

理解Linux的memory overcommit

  • Linux 下的內存管理會影響 Linux 下的 C 代碼在內存分配(malloc)時的執行情況:
  • Memory Overcommit的意思是操作系統承諾給進程的內存大小超過了實際可用的內存。一個保守的操作系統不會允許memory overcommit,有多少就分配多少,再申請就沒有了,這其實有些浪費內存,因為進程實際使用到的內存往往比申請的內存要少,比如某個進程malloc()了200MB內存,但實際上只用到了100MB,按照UNIX/Linux的算法,物理內存頁的分配發生在使用的瞬間,而不是在申請的瞬間,也就是說未用到的100MB內存根本就沒有分配,這100MB內存就閑置了。
    • commit(或overcommit)針對的是內存申請,內存申請不等于內存分配,內存只在實際用到的時候才分配。
    • 也即有了 overcommit,內存的分配即是一種 lazy memory allocation;
    • 如果在使用過程中,真的超出可用的內存大小,Linux設計了一個OOM killer機制(OOM = out-of-memory)來處理這種危機:挑選一個進程出來殺死,以騰出部分內存,如果還不夠就繼續殺…也可通過設置內核參數 vm.panic_on_oom 使得發生OOM時自動重啟系統。
  • overcommit 參數配置:
    • Linux 2.6之后允許通過內核參數 vm.overcommit_memory 禁止memory overcommit(也可通過 /proc/sys/vm/overcommit_memory)。內核參數 vm.overcommit_memory 接受三種取值:
      • 0 – Heuristic overcommit handling. 這是缺省值,它允許overcommit,但過于明目張膽的overcommit會被拒絕,比如malloc一次性申請的內存大小就超過了系統總內存。Heuristic的意思是“試探式的”,內核利用某種算法(對該算法的詳細解釋請看文末)猜測你的內存申請是否合理,它認為不合理就會拒絕overcommit。
      • 1 – Always overcommit. 允許overcommit,對內存申請來者不拒。
      • 2 – Don’t overcommit. 禁止overcommit。

轉載于:https://www.cnblogs.com/mtcnn/p/9421469.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何正確使用Node.js中的事件

by Usama Ashraf通過Usama Ashraf 如何正確使用Node.js中的事件 (How to use events in Node.js the right way) Before event-driven programming became popular, the standard way to communicate between different parts of an application was pretty straightforward: …

你的成功有章可循

讀書筆記 作者 海軍 海天裝飾董事長 自我修煉是基礎。通過自我學習,在預定目標的指引下,將獲取的知識轉化為個人能力,形成自我規律,不斷循環,實現成功。 尋找和掌握規律,并熟練運用于實踐,是成功…

98k用計算機圖片,98K (HandClap)_譜友園地_中國曲譜網

《98K》文本歌詞98K之歌-HandClap-抖音 制譜:孫世彥這首《HandClap》是Fitz&TheTantrums樂隊演唱的一首歌曲,同時也是絕地求生中囂張BGM,是一首吃雞戰歌!這首歌譜曲者和填詞者都是三個人:JeremyRuzumna&#xff0c…

qt之旅-1純手寫Qt界面

通過手寫qt代碼來認識qt程序的構成,以及特性。設計一個查找對話框。以下是設計過程1 新建一個empty qt project2 配置pro文件HEADERS \Find.h QT widgetsSOURCES \Find.cpp \main.cpp3 編寫對話框的類代碼例如以下://Find.h #ifndef FIND_H #define F…

【隨筆】寫在2014年的第一天

想想好像就在不久前還和大家異常興奮地討論著世界末日的事,結果一晃也是一年前的事了。大四這一年,或者說整個2013年都是場搖擺不定的戲劇,去過的地方比前三年加起來還多的多,有時候也會恍惚地不知道自己現在在哪。簡單記幾筆&…

設計沖刺下載_如何運行成功的設計沖刺

設計沖刺下載by George Krasadakis通過喬治克拉薩達基斯(George Krasadakis) Design Sprints can generate remarkable output for your company — such as a backlog of impactful ideas, functional prototypes, learning and key insights from customers along with real…

leetcode 18. 四數之和(雙指針)

給定一個包含 n 個整數的數組 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a b c d 的值與 target 相等?找出所有滿足條件且不重復的四元組。 注意: 答案中不可以包含重…

WPF:從WPF Diagram Designer Part 4學習分組、對齊、排序、序列化和常用功能

在前面三篇文章中我們介紹了如何給圖形設計器增加移動、選擇、改變大小及面板、縮略圖、框線選擇和工具箱和連接等功能,本篇是這個圖形設計器系列的最后一篇,將和大家一起來學習一下如何給圖形設計器增加分組、對齊、排序、序列化等功能。 WPF Diagram D…

win7如何看計算機用戶名和密碼怎么辦,win7系統電腦查看共享文件夾時不顯示用戶名和密碼輸入窗口的解決方法...

win7系統使用久了,好多網友反饋說win7系統電腦查看共享文件夾時不顯示用戶名和密碼輸入窗口的問題,非常不方便。有什么辦法可以永久解決win7系統電腦查看共享文件夾時不顯示用戶名和密碼輸入窗口的問題,面對win7系統電腦查看共享文件夾時不顯…

ASP.NET Core跨域設置

項目中經常會遇到跨域問題,解決方法: 在appsettings.json 文件中添加json項 {"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","AppCores": "https…

微信客戶端<->騰訊微信服務器<->開發者服務器

出自 http://blog.csdn.net/hanjingjava/article/details/41653113 首先,通過Token驗證,將公眾號接入開發者服務器,這樣客戶端發給公眾號的信息會被轉發給開發者服務器; 第二,組裝微信特定消息格式,返回給用…

idea提高調試超時_如何提高您的調試技能

idea提高調試超時by Nick Karnik尼克卡尼克(Nick Karnik) 如何提高您的調試技能 (How to Improve Your Debugging Skills) All of us write code that breaks at some point. That is part of the development process. When you run into an error, you may feel that you do…

leetcode 834. 樹中距離之和(dp)

給定一個無向、連通的樹。樹中有 N 個標記為 0...N-1 的節點以及 N-1 條邊 。第 i 條邊連接節點 edges[i][0] 和 edges[i][1] 。返回一個表示節點 i 與其他所有節點距離之和的列表 ans。示例 1:輸入: N 6, edges [[0,1],[0,2],[2,3],[2,4],[2,5]] 輸出: [8,12,6,10,10,10] 解…

CSS設計指南(讀書筆記 - 背景)

本文轉自william_xu 51CTO博客,原文鏈接:http://blog.51cto.com/williamx/1140006,如需轉載請自行聯系原作者

在計算機網絡中 帶寬是什么,在計算機網絡中,“帶寬”用____表示。

答案查看答案解析:【解析題】計算機的發展經歷了4個時代,各個時代劃分的原則是根據()。【解析題】計算機網絡的最主要的功能是______。【解析題】馮.諾依曼提出的計算機工作原理為____。【解析題】計算機的通用性使其可以求解不同的算術和邏輯問題,這主要…

如何在iOS上運行React Native應用

by Soujanya PS通過Soujanya PS 如何在iOS上運行React Native應用 (How to run a React Native app on iOS) I recently started to develop a React-Native app on iOS. This was my first foray into native app development. I was surprised by the ease and level of abs…

導出excel 后 頁面按鈕失效(頁面假死)

在 page_load 里加上如下代碼:string beforeSubmitJS "\nvar exportRequested false; \n"; beforeSubmitJS "var beforeFormSubmitFunction theForm.onsubmit;\n"; beforeSubmitJS "theForm.onsubmit function(){ \n"; …

Mysql分組查詢group by語句詳解

(1) group by的含義:將查詢結果按照1個或多個字段進行分組,字段值相同的為一組(2) group by可用于單個字段分組,也可用于多個字段分組 select * from employee; --------------------------------------------- | num | d_id | name | age | sex | homea…

leetcode 75. 顏色分類(雙指針)

給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。 此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 注意: 不能使用代碼…

火車頭如何才能設置發布的時候,如果是有html代碼就直接的轉換掉,互聯網上笑話抽取及排重---火車頭采集器的使用和MD5算法的應用...

10011311341 呂濤、10011311356李紅目的:通過熟悉使用火車頭采集器,在網絡上采取3萬條笑話并進行排重,以此來熟悉web文本挖掘的一些知識。過程:本次學習,主要分成兩個部分。第一部分是笑話文本的采集,第二部…