【问题标题】:mmap fails for large memory mappings (Centos 7, Kernel 3.10.0-862.el7.x86_64)大型内存映射的 mmap 失败(Centos 7,内核 3.10.0-862.el7.x86_64)
【发布时间】:2018-10-07 03:37:49
【问题描述】:

我试图在其中一台运行 CentOS 7 的服务器上运行 MySQL 服务器。如果 innodb_buffer_pool_size 设置为 120GB 以上,分配失败。在内部,它正在尝试映射大型缓冲区。机器有 256 GB RAM。所以我编写了以下测试代码,我认为这也是 MySQL 也在做的事情。此代码在大约 130 GB 时也会失败

    #define SIZE 1 * 1024 * 1024 * 1024


    int main() {
        unsigned long i, k = 0;
        void **ptr = NULL;
        char *mvptr = NULL;
        ptr = malloc(sizeof(void *) * 220);

        for(i = 0; i < 220;i++){
                ptr[i] = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,0);
                printf("%d  : %lx\n",i, ptr[i]);
                if ((ptr[i] == (void *)-1))
                {
                        printf("error :%d\n",errno);
                        return 0;

                }
                else
                {
                     mvptr = ptr[i];
                     for(k = 0; k < SIZE; k++)
                         mvptr[k] = 'a';

                }

        }
        sleep(20);
        for(i = 0; i < 220;i++){
                munmap(ptr[i], SIZE);
        }
        free(ptr);
}

结果是

124  : 7fc8b2ada000
125  : 7fc872ada000
126  : 7fc832ada000
127  : 7fc7f2ada000
128  : 7fc7b2ada000
129  : ffffffffffffffff
error :12

在运行时免费 -g 显示

运行前

              total        used        free      shared  buff/cache   available
Mem:            251           2         248           0           0         248
Swap:             3           0           3

运行时

              total        used        free      shared  buff/cache   available
Mem:            251         130         120           0           0         120
Swap:             3           0           3

我在这里做错了吗?由于仍有大量可用内存,这可能是什么原因?

【问题讨论】:

    标签: linux-kernel centos7 mmap


    【解决方案1】:

    这是因为 /proc/sys/vm/overcommit_ratio 是 50。如果 overcommit_ratio 被修改,它能够分配更高的值。

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 2021-05-02
      • 1970-01-01
      • 2013-09-13
      • 2015-05-03
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多