mysql 32位4g存储_32位Linux单进程4G内存限制

可用下面代码测试系统能给单进程分配多少用户态内存:

1 #include

2 #include

3

4 int main(){

5   int MB = 0;

6   while(malloc(1 << 20)) ++MB;

7   printf("Allocated %d MB total.n", MB);

8 }

这段代码在32位系统上执行,返回3066M;在64位系统上执行,系统最后会变得负载很高,然后内核就把进程kill了。这说明32位系统上单进程是有内存分配限制的,而64位则没有。

编译32位linux内核时,打开linux内核的PAE寻址支持,最大支持的内存可以从32位提高到36位(4G->64G),而单进程能分配的内存却仍然有4G限制。即:对于每个进程,用户态最多分配3G内存,核心态最多分配1G内存。

那么能不能通过调整内核参数的办法动态调整,使得32位linux内核支持单进程分配大于4G内存呢?这是个有现实意义的问题。Squid,Mysql,Java等都是单进程应用。而现在的主流服务器,很多都可以可以配置非常高的内存。例如Dell 6850,HP580都能插16G内存,我见过的一款Sun的服务器甚至支持48G内存。这些大内存机器如果跑单进程应用,那么内存就全浪费了。

我查了一些资料,结论是,32位BSD可以动态调整内核参数以支持单进程分配大内存,

32位linux系统是无法解决单进程4G内存限制的。

下面是摘自High Memory in the Linux Kernel里面的一段话:

This is enabled via the PAE (Physical Address Extension) extension of the PentiumPro processors. PAE addresses the 4 GB physical memory limitation and is seen as Intel's answer to AMD 64-bit and AMD x86-64. PAE allows processors to access physical memory up to 64 GB (36 bits of address bus). However, since the virtual address space is just 32 bits wide, each process can't grow beyond 4 GB.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值