Linux 內存概念
1.Linux mem/swap/buffers/cached區別
free命令相對於top,提供了更簡潔的查看系統內存使用情況:
# free -m
# 以M為單位顯示內存使用情況
mem:表示物理內存統計
buff/cache:表示物理內存的緩存統計
swap:表示硬盤上交換分區的使用情況
系統當前真正可用的內存並不是第一行 free 標記的,僅代表未被分配的內存。
2.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
3.Swap
當Linux的物理內存快要被耗盡時,系統會把一些進程占用的內存轉移到 swap 區,當物理內存被釋放一部分時,swap 區的一些內存占用又慢慢回到 mem 區,但是 mem 區卻不再是之前的滿負荷狀態,而是有一部分 free 的內存!
【總結】
1)當物理內存快被耗盡時,系統並沒有崩潰,而是拿 swap 做臨時內存,當兩者都耗盡,系統 OutofMemory
2)物理內存達到峰值,系統中一些不常用的進程內存占用被提到 swap 區
3)當 Men 區的資源進行釋放時,被挪到 swap 的內存並不會全部回來,隨着系統或者程序的喚醒才會慢慢回到 men 區
4)swap 是內存不夠時,磁盤虛擬出來的內存,磁盤主要是 I/O 級別的操作,並不是系統內核級別的操作,處理速度跟 mem 區不是一個等級