成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux系統內存去哪兒了?

系統 Linux
在Linux下,我們經常使用free命令來查看系統的內存使用情況。細心的同學會發現,它只顯示總量為3419MB(實際內存為4GB,32bit系統),為什么Linux系統沒能全部識別出來呢?Linux系統內存去哪兒了?

[[111344]]

在Linux下,我們經常使用free命令來查看系統的內存使用情況。

  1. [root@AC1 ~]# free -m 
  2.              total       used       free     shared    buffers     cached 
  3. Mem:          3419       3101        318          0         62       1930 
  4. -/+ buffers/cache:       1109       2310 
  5. Swap:            0          0          0 

細心的同學會發現,為何它只顯示總量為3419MB呢?好像一般情況下沒有這種不上不下的內存大小(其實我的內存為4GB,32bit系統)。那么為什么Linux系統沒能全部識別出來呢?難道從硬件識別過程就出錯了?好吧,我重啟機器進入BIOS看看,memory為4GB,說明BIOS是可以識別出全部內存,那就在linux啟動時沒有了識別到全部內存了。再看看kernel啟動日志與內存相關的打印:

  1. [root@AC1 ~]# more /var/log/dmesg 
  2. …… 
  3. [    0.000000] 2695MB HIGHMEM available. 
  4. [    0.000000] 887MB LOWMEM available. 
  5. …… 
  6. [    0.000000] Initializing HighMem for node 0 (000377fe:000dffc0) 
  7. [    0.000000] Memory: 3494612k/3669760k available (3678k kernel code, 174680k reserved, 2107k data, 396k init, 2760456k highmem) 
  8. …… 

小學老師沒有好好教數學,所以我只會用計算器計,算了一下2695MB+887MB=3582MB,說明kernel啟動時就只識別到了這么多內存。再看,3582MB*1024=3667968KB與22行3669760K很接近,本行3494612K和free命令顯示的total mem接近。所以kernel很老實,按部就班的執行這它該做的事,沒有偷偷吃掉內存。沒辦法了,只好往前看dmsg。

很快就到了dmesg開始的地方,再也沒有更前面的東東了。

  1. [0.000000] BIOS-provided physical RAM map: 
  2. [0.000000]  BIOS-e820: 0000000000000000 - 000000000009bc00 (usable) 
  3. [0.000000]  BIOS-e820: 000000000009bc00 - 00000000000a0000 (reserved) 
  4. [0.000000]  BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) 
  5. [0.000000]  BIOS-e820: 0000000000100000 - 00000000dffc0000 (usable) 
  6. [0.000000]  BIOS-e820: 00000000dffc0000 - 00000000dffce000 (ACPI data) 
  7. [0.000000]  BIOS-e820: 00000000dffce000 - 00000000dffe0000 (ACPI NVS) 
  8. [0.000000]  BIOS-e820: 00000000dffe0000 - 00000000e0000000 (reserved) 
  9. [0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) 
  10. [0.000000]  BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) 
  11. [0.000000]  BIOS-e820: 0000000100000000 - 0000000120000000 (usable) 
  12. [0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! 

這些打印是kernel從BIOS中獲取到的系統內存映射,乍一看很正常的呀。***一行說我沒有使用PAE選項,但我的內存沒有超過4GB所以不需要打開它。但我的系統時32位的,映射時哪里來了那么長的地址呀?數數32*4=128位,我**,這BIOS好強悍,也不管我的系統行不行就搞了這么大,幸好前面還是有好多0的。再次靠計算器計算一下:2^32 = 4294967296 = 0x100000000(不用數了,8個0)。 至此是不是有所發現了?

看上面第12行:0000000100000000 - 0000000120000000 這段地址超過了32位系統能訪問的范圍。在算算0x20000000=512M,加到free -m看到的3419M就等于……(還是用一下計算器:等于3931M)貌似與4G還是差的有點多。其實應該把512M加上3582M才對,這個3582M怎么來的?不知道的請復習本文前面內容。這下加起來結果就是4094M,與4096M(4G)就基本一樣了。現在就知道原因了:BIOS可能會把部分系統內存映射到OS不能訪問的位置(有些廠商的BIOS會可惡點,讓OS訪問不到更多的內存)。

提供兩種解決辦法:

1. 打開kernel PAE編譯選項,其中PAE選項要選擇64GB;

2. 使用64bit系統。

責任編輯:黃丹 來源: 51CTO博客
相關推薦

2018-10-29 13:46:02

2019-02-01 08:12:16

果粉蘋果庫克

2014-02-19 14:33:17

2012-12-21 12:40:15

智慧云手機軟件

2017-10-12 10:06:23

Linux內存free命令

2018-12-24 08:48:14

NginxApache Cookie

2014-02-13 16:16:33

云架構云計算

2021-09-09 18:12:22

內存分段式網絡

2014-02-13 09:40:20

架構師春節旅游

2015-11-13 09:34:25

流量wifi運營商

2022-08-30 15:12:10

架構實踐

2019-08-22 09:30:15

舊iPhone蘋果手機

2015-11-10 10:40:56

百度愛奇藝規劃

2014-06-09 16:32:55

大數據大數據人才

2017-05-15 15:54:50

MySQL數據庫

2024-07-25 13:04:21

2021-09-29 09:50:41

Linux內核日志

2021-09-08 05:46:51

Linux內核日志

2017-09-08 15:12:25

智能手表智能眼鏡VR

2017-11-27 09:06:16

程序員大數據多線程爬蟲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91热在线 | 婷婷色国产偷v国产偷v小说 | 丁香婷婷在线视频 | 一级毛片免费看 | 黄色大片在线视频 | 成人在线观看网址 | 欧美精品在线一区 | 国产精品久久久久久久免费大片 | 日韩在线电影 | 亚洲视频免费观看 | 日本久草 | 韩日在线视频 | 久久狠狠 | 国产黄色在线观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 成人久久 | 国产一区影院 | 亚洲精品一区二区三区 | 国产精品夜色一区二区三区 | 麻豆精品久久久 | 伊人网在线看 | 国产亚洲精品美女久久久久久久久久 | 欧美一区二区三区国产 | 97精品国产一区二区三区 | av影音资源 | 亚洲综合电影 | 毛片免费观看 | 久久久久久国产 | 一区二区视频免费观看 | 91av在线不卡 | 成年人在线观看 | 视频二区| 有码在线| 91视频久久久久 | 欧美综合在线视频 | 中文字幕一区二区三区在线观看 | www.青娱乐 | 免费一区二区 | 激情一区二区三区 | 亚洲人va欧美va人人爽 | 久久精品亚洲欧美日韩久久 |