Linux記憶體 mem 和 swap

2022-07-26 10:12:09 字數 1232 閱讀 5183

摘抄並用於自查

linux mem/swap/buffers/cached區別

free命令相對於top,提供了更簡潔的檢視系統記憶體使用情況:

# free -m

mem:表示物理記憶體統計

buff/cache:表示物理記憶體的快取統計

swap:表示硬碟上交換分割槽的使用情況

系統當前真正可用的記憶體並不是第一行 free 標記的,他僅代表未被分配的記憶體

buff/cache列占用過高

buff/cache主要幹啥來的?

linux具有先進的快取機制,會針對dentry(用於vfs-虛擬檔案系統,加速檔案路徑名到inode的轉換)、buffer cache(針對磁碟塊的讀,寫)和 page cache(針對檔案 inode 的讀寫)進行快取操作來提高讀寫效率。但是在進行了大量檔案操作之後,快取會把記憶體資源基本用完,雖然檔案讀取效率提高了,但是物理記憶體會被逐漸吃完。

原來是因為系統進行了頻繁的檔案讀寫操作,但是為什麼作業系統不會主動**呢,原來是因為drop_caches 的預設引數設定的就是不釋放。

drop_caches 的值可以是 0-3 之間的數字,代表不同的含義:

0:不釋放(系統預設值)

1:釋放頁快取

2:釋放dentries和inode

3:釋放所有快取

修改:# echo 1 > /proc/sys/vm/drop_caches

小插曲

當linux的物理記憶體快要被耗盡時,系統會把一些程序占用的記憶體轉移到 swap 區,當物理記憶體被釋放一部分時,swap 區的一些記憶體占用又慢慢回到 mem 區,但是 mem 區卻不再是之前的滿負荷狀態,而是有一部分 free 的記憶體!

【總結】

1)當物理記憶體快被耗盡時,系統並沒有崩潰,而是拿 swap 做臨時記憶體,當兩者都耗盡,系統 outofmemory

2)物理記憶體達到峰值,系統中一些不常用的程序記憶體占用被提到 swap 區

3)當 men 區的資源進行釋放時,被挪到 swap 的記憶體並不會全部回來,隨著系統或者程式的喚醒才會慢慢回到 men 區

4)swap 是記憶體不夠時,磁碟虛擬出來的記憶體,磁碟主要是 i/o 級別的操作,並不是系統核心級別的操作,處理速度跟 mem 區不是乙個等級

linux檢視和釋放swap記憶體

一 檢視swap記憶體被哪些程序占用 輸出單位是mbyte for i in cd proc ls grep 0 9 awk 0 100 do awk swap end proc i smaps done 2 1 sort k2nr head 二 如何釋放swap記憶體 法1,重啟占用swap的程序...

給Linux增加swap記憶體

cc 編譯器內部錯誤 已殺死 程式 cc1 please submit a full bug report,see for instructions.解決方法 這個原因是記憶體不足,在linux下增加臨時swap空間 step 1 sudo dd if dev zero of home swap b...

Linux記憶體機制以及手動釋放swap和記憶體

原文 一 什麼是linux的記憶體機制?程式在讀寫資料時記憶體到速度是硬碟速度的n倍 具體時間可檢視文章 記憶體比硬碟快多少?所以,希望所有資料的讀取和寫入都在記憶體完成,而記憶體是有限的,這樣就引出了物理記憶體與虛擬記憶體的概念。物理記憶體就是系統硬體提供的記憶體大小,是真正的記憶體,相對於物理記...