淺談linux效能調優之十一:記憶體配置管理

來源:互聯網
上載者:User

淺談linux效能調優之十一:記憶體配置管理 淺談linux效能調優之十:資源分派規劃http://www.bkjia.com/os/201307/228396.html     linux下記憶體配置的管理主要通過核心參數來控制:    1.與容量相關的記憶體可調參數      以下參數位於 proc 檔案系統的 /proc/sys/vm/ 目錄中。      overcommit_memory :規定決定是否接受超大記憶體請求的條件。這個參數有三個可能的值:         * 0 — 預設設定。核心執行啟發學習法記憶體過量使用處理,方法是估算可用記憶體量,並拒絕明顯無效的請求。遺憾的是因為記憶體是使用啟發學習法而非準確演算法計算進行部署,這個設定有時可能會造成系統中的可用記憶體超載。不讓過度使用,直接報錯         * 1 — 核心執行無記憶體過量使用處理。使用這個設定會增大記憶體超載的可能性,但也可以增強大量使用記憶體任務的效能。應用程式在需要時分配,允許過度使用         * 2 — 記憶體拒絕等於或者大於總可用 swap 大小以及 overcommit_ratio 指定的物理 RAM 比例的記憶體請求。如果您希望減小記憶體過度使用的風險,這個設定就是最好的。 將swap直接使用,使用的記憶體 = swap + ram * 50%            注意:只為 swap 地區大於其實體記憶體的系統推薦這個設定      overcommit_ratio         將 overcommit_memory 設定為 2 時,指定所考慮的物理 RAM 比例。預設為 50。 測試程式:################################################################################include "stdio.h"#include "stdlib.h"#include "errno.h" #define maxtimes 1000*1000#define unit 10485760int main(){    char *q[1000000];    int i=1;    char *pc;    for (i=1; i<=maxtimes;i++)        {                q[i] = (char *)malloc(unit);                if ( q[i] == NULL)                {                        printf ("malloc error\n");                }                printf("%o\n",q[i]);                pc = (char*)(q[i]);                for (int j=0;j<10485760;j++)                {                        pc[j]='a';                }                printf("%s\n",pc);                printf("have been malloc %dM\n",i);        }    return 0;} ###############################################################################     測試1:overcommit_memory = 0 也是預設的情況,我實體記憶體2G,開機後查看已使用600M左右,我在這裡關閉了swap分區,編譯來測試,結果:使用top 查看a.out的RES(實體記憶體的使用)到達了1.3g   進程被Killed (原因在後面說) 1.3g+600多M = 2G  查看日誌:Jul 16 14:24:48 localhost kernel: Out of memory: kill process 19066 (a.out) score 131753 or a childJul 16 14:24:48 localhost kernel: Killed process 19066 (a.out) vsz:8432216kB, anon-rss:1377108kB, file-rss:92kB     測試2:overcommit_memory = 1,情況和測試1一致,[root@localhost Desktop]# free             total       used       free     shared    buffers     cachedMem:       1978696    1873644     105052          0       8268      75012-/+ buffers/cache:    1790364     188332      我們可以看到:記憶體在剩100M左右時,a.out先卡住了一會,然後有開始執行了 ,它會一直等待能夠使用的資源再執行 (都是別的進程釋放的資源),用來不會被殺死,因為這個模式對記憶體無限制     測試3:overcommit_memory = 2,overcommit_ratio預設,都使用,記憶體會在一定剩餘的情況下不能malloc程式執行結果:have been malloc 266M  這裡是2660malloc error0Segmentation fault (core dumped)             o: VIRT  --  Virtual Image (kb)          The total amount of virtual memory used by the  task.   It  includes          all  code,  data  and  shared  libraries  plus  pages that have been          swapped out. (Note: you can define the STATSIZE=1 environment  vari-          able  and  the VIRT will be calculated from the /proc/#/state VmSize          field.)           VIRT = SWAP + RES.        p: SWAP  --  Swapped size (kb)          The swapped out portion of a task’s total virtual memory image.        q: RES  --  Resident size (kb)          The non-swapped physical memory a task has used.     2.Out-of-Memory Kill 可調參數    記憶體不足(OOM)指的是所有可用記憶體,包括 swap 空間都已被分配的計算狀態。預設情況下,這個狀態可造成系統 panic,並停止如預期般工作。但將 /proc/sys/vm/panic_on_oom 參數設定為 0 會讓核心在出現 OOM 時調用 oom_killer 功能。通常 oom_killer 可殺死偷盜進程,並讓系統正常工作。    可在每個進程中設定以下參數,提高您對被 oom_killer 功能殺死的進程的控制。它位於 proc 檔案系統中 /proc/pid/ 目錄下,其中 pid 是進程 ID。 oom_adj    定義 -16 到 15 之間的一個數值以便協助決定某個進程的 oom_score。oom_score 值越高,被 oom_killer 殺死的進程數就越多。將 oom_adj 值設定為 -17 則為該進程禁用 oom_killer。     注意:    由任意調整的進程衍生的任意進程將繼承該進程的 oom_score。例如:如果 sshd 進程不受 oom_killer 功能影響,所有由 SSH 會話產生的進程都將不受其影響。這可在出現 OOM 時影響 oom_killer 功能救援系統的能力。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.