大家好,我是良許。
熟悉計算機的小伙伴都知道,我們常說的主機三大件分別是主板,CPU,內存,可見內存在計算機主機中的角色也非同一般,喜歡 diy 主機的小伙伴對這三大件的了解更是精益求精。
編寫過程序的小伙伴對于程序的執(zhí)行過程,也是耳熟能詳了,先從硬盤加載到內存,然后 CPU 與內存進行數(shù)據(jù)交換與處理,完成相應的操作(真實執(zhí)行細節(jié)相當復雜),從而實現(xiàn)相應的功能。
但是內存的容量非常有限,由于內存的造價較高(目前常用的內存為雙倍速 SDRAM ),計算機用戶升級內存容量也是一筆不小的開支。
那么良許就和大家來討論下計算機的內存如果不夠用了, 虛擬內存技術的應用,虛擬內存的出現(xiàn),讓機器內存不夠的情況得到部分解決,大家需要注意的是有些資料也將虛擬內存稱之為交換內存。
1. 討論虛擬內存前的熱身
我們需要知道的是計算機對內存分為物理內存與虛擬內存(注意虛擬內存和虛擬地址空間的區(qū)別)。物理內存就是計算機的實際內存大小,由 RAM 芯片組成的。虛擬內存則是虛擬出來的、使用磁盤代替內存。
2. 虛擬內存的工作原理
正如前面所描述的,當系統(tǒng)的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。
那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到交換空間中,等到那些程序要運行時,再從交換空間中恢復保存的數(shù)據(jù)到內存中。
3. linux 虛擬內存的實現(xiàn)方式
Linux 系統(tǒng)實現(xiàn)虛擬內存有兩種方法,分別是交換分區(qū)( swap 分區(qū))和交換文件。
##### 交換分區(qū)
交換分區(qū)其實就是新建一個分區(qū),然后將該分區(qū)掛載作為交換空間,方法步驟與傳統(tǒng)的新建分區(qū)一樣。只不過格式化分區(qū)和掛載分區(qū)分別采用 mkswap 和 swapon 命令。
交換文件
硬盤驅動器中沒有足夠的空間來創(chuàng)建交換分區(qū),我們就會手動創(chuàng)建一個交換文件以將 RAM 的非活動內容交換到其中。
4. 理想的交換權重
Linux 允許我們自行設置交換的權重,也就是說我們可以設置交換過程發(fā)生的頻率。小伙伴們可以根據(jù)需要在0到100之間設置交換的權重。值越小則代表會讓內核盡量少用交換,值越大會使內核更多的去使用交換空間。
交換權重的默認值和建議值為60,有興趣的小伙伴可以具體去學習 swAppiness ,這個 Linux 內核參數(shù),這里不做過多的描述了。
5.使用虛擬內存的好處
- 它可以輕松地保存那些幾乎不使用而又被占用的 RAM 塊。然后可以將釋放的 RAM 用于容納更多具有更高優(yōu)先級的程序。
- 防止 RAM 空間用完,無法執(zhí)行其他程序的局面。
- 虛擬內存充當了 RAM 的備份,從而增大了 RAM 的實際空間。
- 在休眠過程中,RAM 的所有內容均寫入交換空間。因此,成功進行休眠,虛擬內存是必需的。
- 它提高了系統(tǒng)的整體性能。(在內核參數(shù) swappiness 設置合理的情況下)
6. 結論
在本文中,我們學習了交換內存以及它的許多好處,RAM 空間不足時,它將作為 RAM 的擴充進行使用,避免我們的應用程序因內存不足而崩潰。
其實,Swap 的調整對 Linux 服務器,特別是 Web 服務器的性能至關重要。通過調整 Swap,有時可以越過系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級費用。