日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux ofstream open,浅谈linux性能调优之十一:内存分配管理

發布時間:2024/7/23 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux ofstream open,浅谈linux性能调优之十一:内存分配管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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 10485760

int 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 child

Jul 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???? cached

Mem:?????? 1978696??? 1873644???? 105052????????? 0?????? 8268????? 75012

-/+ buffers/cache:??? 1790364???? 188332

我們可以看到:內存在剩100M左右時,a.out先卡住了一會,然后有開始執行了 ,它會一直等待能夠使用的資源再執行 (都是別的進程釋放的資源),用來不會被殺死,因為這個模式對內存無限制

測試3:overcommit_memory = 2,overcommit_ratio默認,都使用,內存會在一定剩余的情況下不能malloc

程序執行結果:

have been malloc 266M? 這里是2660

malloc error

0

Segmentation fault (core dumped)

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux ofstream open,浅谈linux性能调优之十一:内存分配管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。