免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: congli
打印 上一主题 下一主题

一个进程可以分配多大的内存? [复制链接]

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
11 [报告]
发表于 2006-03-26 20:44 |只看该作者
原帖由 zzbwang 于 2006-3-26 20:18 发表
我也遇到了同样的问题,我在DELL2850服务器上安装了4GB内存,同时调整了/boot/loader.conf中的MAXDSIZ的值,发现当MAXDSIZ值设置到3GB以上时,服务器就不能启动。至今不知道什么原因。

楼主所作的试验我以前也 ...

看过兄弟发的贴,
这个问题的确值得探讨.
而gvim兄弟在NetBSD上做的实验,将MAXDSIZ和DFLDSIZ为3G,编译通过,启动正常.

PS:现在只想知道为什么,而并不是评论那个好坏.

论坛徽章:
0
12 [报告]
发表于 2006-03-26 20:56 |只看该作者
能分得多大的内存,还应该跟机器的物理内存和交换分区大小有关。

NetBSD UVM FAQ 上有这么一条:

How much virtual memory do I have?

http://www.netbsd.org/Documentation/kernel/uvm.html#vm-how-big

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
13 [报告]
发表于 2006-03-26 21:05 |只看该作者
原帖由 szjungle 于 2006-3-26 20:56 发表
能分得多大的内存,还应该跟机器的物理内存和交换分区大小有关。

NetBSD UVM FAQ 上有这么一条:

How much virtual memory do I have?

[url]http://www.netbsd.org/Documentation/kernel/uvm.html#vm-ho ...

但zzbwang兄弟的机器好象是4GB的物理内存.
明天回公司搞台2G内存的机器来实验,不能再多了.

论坛徽章:
0
14 [报告]
发表于 2006-03-26 23:55 |只看该作者
如果只是分配内存的话,内核应该会使用一种“聪明”的办法来解决问题。 不妨试试分配内存之后往这些内存单元里写一点东西,那你可能会看到实际能分配的能力了。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
15 [报告]
发表于 2006-03-27 09:24 |只看该作者
原帖由 szjungle 于 2006-3-26 20:56 发表
能分得多大的内存,还应该跟机器的物理内存和交换分区大小有关。

NetBSD UVM FAQ 上有这么一条:

How much virtual memory do I have?

[url]http://www.netbsd.org/Documentation/kernel/uvm.html#vm-ho ...


我的机器是512M memoey+256M swap 可是申请的虚拟空间是2869M。
为什么会这样而不是FAQ上的样子,还需要看看代码。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
16 [报告]
发表于 2006-03-27 09:26 |只看该作者
原帖由 fredrick 于 2006-3-26 23:55 发表
如果只是分配内存的话,内核应该会使用一种“聪明”的办法来解决问题。 不妨试试分配内存之后往这些内存单元里写一点东西,那你可能会看到实际能分配的能力了。


实际能分配的,最大只能 (物理内存-内核所占大小)+swap空间大小。
我们实验的是虚拟分配的

论坛徽章:
1
寅虎
日期:2013-09-29 23:15:15
17 [报告]
发表于 2006-03-27 14:11 |只看该作者
经过一翻折腾,终于找到了原因.感谢风雨^_^
默认情况下,系统会保留1GB空间(打开PAE,会保留2GB),所以导致MAXDSIZ=3GB启动时出现panic.
options MAXDSIZ="(3072ULL*1024*1024)"
options DFLDSIZ="(3072ULL*1024*1024)"

options KVA_PAGES="(192)"     # 实际大小是192*4=768MB,默认是256*4=1024MB


最后结果:
Allocated 3071 MB total.

呵~比linux还要多^_^

PS:虽然找到原因,修改后对性能是否影响请自行判定,此贴只属研究性质.
测试环境:FreeBSD i386 5.4-Release-p13 , 1GB内存.

论坛徽章:
0
18 [报告]
发表于 2006-03-27 15:27 |只看该作者
[root@bsd ~]#vi sh

#include <stdio.h>
#include <stdlib.h>

int main(){
        int MB = 0;
        while(malloc(1 << 20)) ++MB;
        printf("Allocated %d MB total.\n", MB);
}

# ./sh

./sh: line 4: syntax error near unexpected token `('
./sh: line 4: `int main(){'

怎么不行?

[ 本帖最后由 llzqq 于 2006-3-27 15:28 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2006-03-27 15:30 |只看该作者
不是要main(void){}吧

论坛徽章:
0
20 [报告]
发表于 2006-03-27 15:51 |只看该作者
呵呵,llzqq用shell来运行也可以吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP