久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux物理內存的概念是什么

187次閱讀
沒有評論

共計 5186 個字符,預計需要花費 13 分鐘才能閱讀完成。

這篇文章主要介紹“linux 物理內存的概念是什么”,在日常操作中,相信很多人在 linux 物理內存的概念是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux 物理內存的概念是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

在 linux 中,物理內存是指系統硬件提供的內存大小,是真實的內存。Linux 的內存管理采取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

Linux 中的虛擬內存和物理內存

我們都知道,直接從內存讀寫數據要比從硬盤讀寫數據快得多,因此更希望所有數據的讀取和寫入都在內存中完成,然而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。

物理內存就是系統硬件提供的內存大小,是真正的內存。相對于物理內存,在 Linux 下還有一個虛擬內存的概念,虛擬內存是為了滿足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存。用作虛擬內存的磁盤空間被稱為交換空間(又稱 swap 空間)。

作為物理內存的擴展,Linux 會在物理內存不足時,使用交換分區的虛擬內存,更詳細地說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣一來,物理內存得到了釋放,這塊內存就可以用于其他目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。

Linux 的內存管理采取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

要深入了解 Linux 內存運行機制,需要知道下面提到的幾個方面:

首先,Linux 系統會不時地進行頁面交換操作,以保持盡可能多的空閑物理內存,即使并沒有什么事情需要內存,Linux 也會交換出暫時不用的內存頁面,因為這樣可以大大節省等待交換所需的時間。

其次,Linux 進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,Linux 內核根據“最近最經常使用”算法,僅僅將一些不經常使用的頁面文件交換到虛擬內存。

有時我們會看到這么一個現象,Linux 物理內存還有很多,但是交換空間也使用了很多,其實這并不奇怪。例如,一個占用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但后來這個占用很多內存資源的進程結束并釋放了很多內存時,剛才被交換出去的頁面文件并不會自動交換進物理內存(除非有這個必要),那么此時系統物理內存就會空閑很多,同時交換空間也在被使用,就出現了剛才所說的現象了。

最后,交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此一來,虛擬內存中可能沒有足夠的空間來存儲這些交換頁面,最終會導致 Linux 出現假死機、服務異常等問題。Linux 雖然可以在一段時間內自行恢復,但是恢復后的系統己經基本不可用了。

因此,合理規劃和設計 Linux 內存的使用是非常重要的,關于物理內存和交換空間的大小設置問題,取決于實際所用的硬盤大小,但大致遵循這樣一個基本原則:

如果內存較小(根據經驗,物理內存小于 4GB),一般設置 swap 分區大小為內存的 2 倍;

如果物理內存大于 4GB,而小于 16GB,可以設置 swap 分區大小等于物理內存;

如果內存大小在 16GB 以上,可以設置 swap 為 0,但并不建議這么做,因為設置一定大小的 swap 分區是有一定作用的。

Linux 系統查看內存使用情況

Windows 及帶有 GUI 的 Linux 操作系統中,我們通??梢允褂?UI 查看系統內存及空間使用情況,但是對于開發或者運維人員來說,經常要工作在沒有 GUI 的 Linux 的服務器,命令行能比 GUI 提供更多功能和靈活性。

特別當我們的系統中某個應用程序異常,或者系統占用異常,抑或 linux 開發需要內存裁剪時,我們就要了解下系統內存及空間使用情況,就需要掌握幾個常用的查看工具。

常用命令

查看內存使用情況:free

顯示進程信息(包括 CPU、內存使用等信息):top、ps

查看驅動占用內存:lsmod

1 查看系統內存 free

free 命令可以顯示當前系統未使用的和已使用的內存大小,還可以顯示被內核使用的內存緩沖區。在終端中輸入 free(參數稍后說明)可以看到我們服務器內存情況,如下:

1.1 詳細說明如下:

Mem: 內存的使用信息
Swap: 交換空間的使用信息

total: 總計物理內存的大小。
used: 已使用物理內存。
free: 可用物理內存。
shared: 多個進程共享的內存總額。
buffers/cached: 緩存緩沖使用物理內存大小。
available: 還可以被應用程序使用的物理內存大小。

1.2 各物理內存之間的關系

total = used + free + buffer/cache
avaiable = free + buffer/cache(一般來說是這樣,個人電腦是這樣,但服務器或者公共云普通用戶有部分 buffer/cache 是用不了的就會有 avaiable free + buffer/cache)

1.3 free 與 available 的區別

free 是正在未被使用的內存
available 是應用程序認為可用的內存
Linux 為了提升讀寫性能,消耗一部分內存資源作為緩存或者緩沖內存,在內核看來這部分 buffer/cache 屬于已被使用的內存;在應用程序申請內存,而 free 內存不夠時,就會讓內核回收 buffer 和 cache 來滿足應用程序的內存需求。

1.4buff 和 cache 的區別

buffers 和 cache 是有一定區別的:

A buffer is something that has yet to be“written”to disk. —buffer 寫緩存,數據存儲時,先保存到磁盤緩沖區,然后再寫入到永久空間

A cache is something that has been“reed”from the disk adn stored for later use. –cache 讀緩存,數據從磁盤讀出后,暫留在緩沖區,預備程序接下來的使用。

1.5 free 參數說明

free 命令下顯示的單位是 k,可以在 free 后面加上 -m(即 free -m)顯示單位為 Mb,如下圖:

可以通過 free –help 查看 free 的詳細命令:

通過 free - h 可以自動匹配適合人閱讀習慣的單位,其中 h 是 humanity 之意。

ps:
第 3 行 swap 為交換分區,類似 windows 系統中的虛擬內存,當內存不足的時候,把一部分硬盤空間虛擬成內存使用, 從而解決內存容量不足的情況。

2 查看進程占用內存

top 命令可以實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過 top 命令可以有效的發現系統的缺陷出在哪里,如內存不夠、CPU 處理能力不夠、IO 讀寫過高等。通過 top 命令所提供的互動式界面,用熱鍵可以管理。
相關語法:top -X

-b:以批處理模式操作;-c:顯示完整的治命令;-d:屏幕刷新間隔時間;-I:忽略失效過程;-s:保密模式;-S:累積模式;-i 時間:設置間隔時間;-u 用戶名:指定用戶名;-p 進程號:指定進程;-n 次數:循環顯示的次數。

在 top 命令執行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了 - s 選項,其中一些命令可能會被屏蔽。交互命令如下:

h:顯示幫助畫面,給出一些簡短的命令總結說明;k:終止一個進程;i:忽略閑置和僵死進程,這是一個開關式命令;q:退出程序;r:重新安排一個進程的優先級別;S:切換到累計模式;s:改變兩次刷新之間的延遲時間(單位為 s),如果有小數,就換算成 ms。輸入 0 值則系統將不斷刷新,默認值是 5s;f 或者 F:從當前顯示中添加或者刪除項目;o 或者 O:改變顯示項目的順序;l:切換顯示平均負載和啟動時間信息;m:切換顯示內存信息;t:切換顯示進程和 CPU 狀態信息;c:切換顯示命令名稱和完整命令行;M:根據駐留內存大小進行排序;P:根據 CPU 使用百分比大小進行排序;T:根據時間 / 累計時間進行排序;w:將當前設置寫入~/.toprc 文件中。

直接在終端中輸入 top 指令,可以看到如下界面

2.1 top 命令的第一到第五行的詳細說明如下:

top – 10:14:31 當前系統時間
up 3 days, 22:36 系統已經運行了 3 天 22h46min
1 users 共有 1 個用戶為登錄狀態
load average: 0.57, 0.74, 0.65 系統負載,即任務隊列的平均長度,load average 后面的三個數字分別表示距離現在一分鐘,五分鐘,十五分鐘的負載情況。
注意:load average 數據是每隔 5 秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯 CPU 的數量,結果高于 5 的時候就表明系統在超負荷運轉了。

Tasks: 322 total 總進程數
2 running 正在運行的進程數
320 sleeping 睡眠的進程數
0 stopped 停止的進程數
0 zombie 凍結進程數
%Cpu(s): 2.7 us, 用戶空間占用 CPU 百分比(用戶態使用 CPU 占比)
2.7 sy 內核空間占用 CPU 百分比(系統態使用 CPU 占比)
0.0 ni 用做 nice 加權的進程分配的用戶態 cpu 時間比
94.0 id 空閑的 cpu 時間比
0.0 wa IO wait,cpu 等待磁盤寫入完成時間
0.0 hi Hardware IRQ,硬中斷消耗時間
0.0 si Software IRQ,軟中斷消耗時間
0.7 st 被 hypervisor(管理程序,一般為服務器或者虛擬機)偷取時間
MiB Mem : 11995.2 total 物理內存總量,單位:Mb
360.9 free 空閑內存總量
6766.0 used 使用的物理內存總量,此處需要注意的是:used 實際指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到 free 中去,因此在 linux 上 free 內存會越來越少,但不用為此擔心。
4868.3+buff/cache 用作內核緩存的內存量
MiB Swap: 7680.0 total 交換區總量
7433.1 free 空閑交換區總量
246.9 used 使用的交換區總量
3665.4 avail Mem 在不交換的情況下,對啟動新應用程序可用內存的估計
(網上也有說法是交換區的可用容量)
top 命令第六行為空。
top 命令第七行是各個進程的監控:

從左到右依次為:

PID —  進程 id
USER —  進程所有者
PR —  進程優先級
NI — nice 值。負值表示高優先級,正值表示低優先級
VIRT —  進程使用的虛擬內存總量,單位 kb。VIRT=SWAP+RES
RES —  進程使用的、未被換出的物理內存大小,單位 kb。RES=CODE+DATA
SHR —  共享內存大小,單位 kb
S —  進程狀態。D= 不可中斷的睡眠狀態  R= 運行  S= 睡眠  T= 跟蹤 / 停止  Z= 僵尸進程
%CPU —  上次更新到現在的 CPU 時間占用百分比
%MEM —  進程使用的物理內存百分比
TIME+ —  進程使用的 CPU 時間總計,單位 1 /100 秒
COMMAND —  進程名稱(命令名 / 命令行)

需要注意的是,此界面顯示的并不是所有進程,由于頁面顯示限制僅僅顯示了這幾行,我們可以通過 top -b -n 1 查看系統的所有進程的快照。

3 查看內核占用內存

命令:cat /proc/meminfo

注:initrd 和初始化代碼 init 在引導完成之后會被釋放掉,所以最終的內核可管理內存 (total) 會比 dmesg 顯示的 available 更多一點,相應的源代碼可參見:free_initrd_mem() 和 free_initmem()。
優化可以主要從優化保留內存和優化 used 內存兩個方面進行,具體的需要結合代碼。
查看磁盤命令比較多,最常用的為: df -lh 命令

4 lsmod 查看驅動占用內存

命令:lsmod

功能:
列出已加載的模塊,以友好的方式顯示 /proc/modules 的內容

格式:
第一列:Module 表示模塊的名稱,如 sysDebug
第二列:Size 表示模塊大小,單位:byte
第三列:Used 表示依賴的模塊個數
第四列:by 表示依賴的模塊內容

示例:
lsmod|grep -i ext3 // 查看當前系統是否加載 ext3 驅動模塊

到此,關于“linux 物理內存的概念是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-12發表,共計5186字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 光山县| 五常市| 民丰县| 敦煌市| 黄浦区| 黎平县| 乐都县| 昆明市| 莒南县| 盘锦市| 盈江县| 江都市| 包头市| 博客| 安徽省| 汶川县| 大庆市| 怀化市| 策勒县| 庆城县| 漠河县| 泗洪县| 靖西县| 碌曲县| 宜君县| 大名县| 怀柔区| 胶州市| 汪清县| 宜黄县| 昌乐县| 东乌珠穆沁旗| 陵水| 敦煌市| 华容县| 龙南县| 介休市| 凤冈县| 邳州市| 六枝特区| 南康市|