32M内存 跑linux内核,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.
總結
以上是生活随笔為你收集整理的32M内存 跑linux内核,32位Linux单进程4G内存限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 命令 单词,linux中常用
- 下一篇: linux运行前探秘之四,Linux运行