Linux如何使用总计超过100%的内存

本文探讨了在Linux系统中,一个内存占用高的进程是否能通过fork创建子进程,使得两个进程内存占用总和超过100%的问题。通过实验和分析Linux内存管理特性,如交换分区、延后分配和Copy On Write,发现通过调整内核参数`overcommit_memory`,可以允许这种超过100%的情况发生。
摘要由CSDN通过智能技术生成

需求提出:数据库snapshot

之所以有这个需求,是因为我手头有一个数据库工程,我们打snapshot的时候,是在愿进程调用一个fork,构造了一个子进程,在子进程dump数据的。但是数据库嘛,吃内存是肯定的,于是在我的渣渣虚拟机上,就遇到了内存占用在top观察超过60%,没法fork进行snapshot的窘境。

于是我就想到这个问题:难道一个内存占用超过一定比例的进程,不能调用fork??毕竟,fork会拥有原进程所有的资料,只是fork之后新的进程只拥有当前运行的线程。所以fork之后,两个进程在top里看起来因该是一样的。那么,到底有没有可能,fork之后,两个进程加起来,memory百分比超过100呢?

观点一:必须可以,有虚拟内存映射

我写了个简单的代码,进行测试:

#include <unistd.h>
#include <string.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    int j = 1024 * atoi(argv[1]);
    while(j--)
    {
        int *x = (int*)malloc(1024 * 1024);
        memset(x, 0, 1024 * 1024);//注意这里一定要memset才会实际申请内存,否则只会是虚拟内存
    }
    printf("now ready to fork!\n");
    sleep(10);
    int pid = fork();
    if(pid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值