免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3386 | 回复: 8
打印 上一主题 下一主题

请教一个Linux 2.6.22 下面 mmap的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-31 23:31 |只看该作者 |倒序浏览
今天写了一个测试程序,malloc 900多M , mmap 1G 内存,发现mmap总是失败,报错信息显示 “不能分配内存”, free的内存有2G多应该可以分配的,不知道是哪里有限制导致系统无法申请大内存。请大家指点。谢谢。

系统资源如下:

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      143G   33G  103G  24% /
/dev/sda1              99M   16M   78M  17% /boot
tmpfs                 1.8G  8.0K  1.8G   1% /dev/shm

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3541       1397       2144          0         16       1320
-/+ buffers/cache:         59       3481
Swap:         1983          0       1983

[root@localhost ~]# cat /proc/meminfo
MemTotal:      3626092 kB
MemFree:       1377096 kB
Buffers:         18484 kB
Cached:        2152352 kB
SwapCached:          0 kB
Active:         999752 kB
Inactive:      1205352 kB
HighTotal:     2742808 kB
HighFree:       550396 kB
LowTotal:       883284 kB
LowFree:        826700 kB
SwapTotal:     2031608 kB
SwapFree:      2031608 kB
Dirty:           37680 kB
Writeback:       48584 kB
AnonPages:       34260 kB
Mapped:          10104 kB
Slab:            33476 kB
SReclaimable:    19396 kB
SUnreclaim:      14080 kB
PageTables:       1608 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   3844652 kB
Committed_AS:    69200 kB
VmallocTotal:   116728 kB
VmallocUsed:      5212 kB
VmallocChunk:   111060 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB
[root@localhost ~]#



代码如下:
[root@localhost ~]# cat t.c
#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        char *p;
        int fd;
        char *header;

        p = malloc(948135260);

        if(p==NULL)
                return -1;

        memset(p, 0, 948135260);

        fd = shm_open("ttt", O_RDWR | O_CREAT, 0644);
        if (fd == -1)
                perror("shm_open");


         ftruncate(fd, 1062369960);

        header = mmap(NULL, 1062369960, PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0);


        if(header == (void*)-1){
                perror("mmap");
        }else{

                memset(header, 0, 1062369960);
        }

}
编译:
[root@localhost ~]# gcc t.c -lrt
执行:
[root@localhost ~]# ./a.out
mmap: Cannot allocate memory
[root@localhost ~]#

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
2 [报告]
发表于 2012-02-01 08:38 |只看该作者
ulimit看看

论坛徽章:
0
3 [报告]
发表于 2012-02-01 08:44 |只看该作者
先用普通的文件看能不能成功
可能是你的地址空间无法分配也可能是share memory大小有限制。

论坛徽章:
0
4 [报告]
发表于 2012-02-01 09:43 |只看该作者
[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 57192
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 57192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[root@localhost ~]#

论坛徽章:
0
5 [报告]
发表于 2012-02-01 11:14 |只看该作者
本帖最后由 sttty 于 2012-02-01 11:15 编辑

回复 3# oooooxxxxx

share memory 的限制在哪里可以做修改呢?
地址空间无法分配,这个怎么去判断呢?

谢谢啦


   

论坛徽章:
0
6 [报告]
发表于 2012-02-01 11:43 |只看该作者
sttty 发表于 2012-02-01 11:14
回复 3# oooooxxxxx

share memory 的限制在哪里可以做修改呢?

如果普通文件也不能分配只能说明你的地址空间没有那么大的连续空闲区域了,
share memory的限制应该在/proc下面某个文件吧,我没改过posix的share memory限制,但是根据惯例应该是差不多的。

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
7 [报告]
发表于 2012-02-01 11:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2012-02-02 11:00 |只看该作者
此话怎讲? 回复 7# Sevk


   

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
9 [报告]
发表于 2012-02-02 12:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP