談及linux記憶體,很多時候,我們會關注free,top等基礎命令。當系統遇到異常情況時,記憶體問題的根因追溯,現場診斷時,缺乏深層次的debug能力。本篇幅不做深層討論,能把當前系統的問題描述清楚,是每個sre應該具備的最基礎能力。
2.1 free命令原理
free是通過檢視 /proc/meminfo 來獲取記憶體的使用情況。但是 /proc/meminfo 這個檔案又是怎麼來的?我們先了解下 /proc 目錄:
2.2 命令輸出簡介
每個發行版輸出都有一定差異,我們以debian8 4.19.x發行版為例。
root@4f996feeb851:~# free -m
total used free shared buffers cached
mem: 1991 1909 81 4 155 836
-/+ buffers/cache: 917 1073
swap: 1023 1 1022
大部分的命令輸出意思,大家可以在man文件中找到解析,這裡不做贅述。
2.3 buffer和cache會使用記憶體嗎?
答案是肯定的,先來了解下buffer和cache。
然而,free命令所展示的buffer和cache 有點狹義的意思——free展示的buffer表示 塊裝置所占用的快取 、free展示的cache表示普通檔案占用的the page cache(快取頁) 。
總之,buffer和cache使用的記憶體都是用來加速linux讀寫效能,如果有新的程序需要記憶體,系統會將buffer和cache占用的記憶體**,並重新分配給程序使用。
2.4 其他記憶體概念
rss & vsz & pss & uss
usedmem分為 active & inactive
linux會維護乙個lru list用來管理活動頁和非活動頁的**。 簡單講, 越接近該list的末尾,該頁面被**的概率就越大,反之,越接近列首,則更不易被**。 linux核心會維護兩類lrulist——active list和inactive list,剛訪問過的頁面放入active list,長時間未訪問的頁面放入inactive list,核心執行緒kswapd會定期將active list中的頁面移至 inactive list中。
如果系統的inactive的記憶體過大,可以通過如下操作對其做**。
sync; echo 3 > /proc/sys/vm/drop_caches
現代x86系統,計算機能夠使用的記憶體會大於其物理記憶體的上限,依靠的就是虛擬記憶體機制。linux支援虛擬記憶體機制和實模式機制。
實模式下,計算機會直接申請物理記憶體, 虛擬記憶體機制下,系統會把磁碟當成記憶體的擴充套件,已增加可使用的記憶體大小。並通過對映map的機制,來儲存和物理記憶體的真實對應關係。
1.what is oom?
out of memory killer 是 linux 的一種系統保護機制,在系統記憶體緊張時,kill掉某些程序防止系統卡死。系統通過打分機制,來實施對程序的殺死操作。預設機制是通過掃瞄所有程序的記憶體占用,cpu占用等因素,然後打分 (badness),分數越高,程序被kill的優先順序就越高。
2.哪些行為會讓系統對程序進行打分?
3.在哪兒可以看到程序的打分?
/proc//oom_score
4.手動調整分數
/proc//oom_adj 該檔案可以用於調整在oom發生時,哪些程序應該被kill,範圍-16 -- +15 ,預設值為0,
特殊值-17:表示程序永遠不會被kill。
5.我怎麼知道系統有沒有觸發過oom?
/var/log/messages 、 /var/log/syslog 系統日誌或者 dmesg 系統日誌診斷工具等都能夠找到
網圖如下:
5.1 swap相關配置
1. 簡介
0: 表示禁止使用swap
60: 預設
100: 瘋狂使用swap
2. 操作方法
或者
1. 需要root使用者
2. 建立儲存檔案
# dd if=/dev/zero of=/home/swap2g bs=1024 count=2m
3. 安全設定
# chown root:root /home/swap2g
# chmod 0600 /home/swap2g
4. 建立liunx交換分割槽
# mkswap /home/swap2g
5. enable 交換分割槽
# swapon /home/swap2g
6. 更新fstab檔案【注意: 部分作業系統不需要】
# vim /etc/fstab
/home/swap2g none swap sw 0 0
7. 檢查是否生效
#free -m
8. 解除安裝swap分割槽
# swapoff /home/swap2g
5.2 快取相關
sync; echo 3 > /proc/sys/vm/drop_caches
0:不釋放
1:釋放頁快取
2:釋放 dentries 和 inodes
3:釋放所有快取
5.3 oom相關
6. 結語
如有紕漏歡迎指正。
HP UX系統診斷日誌
troubleshooting和error logs 1.system error logs 一般有sel,fpl,在mp卡下sl命令可以收集sel和fpl.2.init日誌在efi shell下輸入errdump init命令可以收集,mca日誌在efi shell下輸入errdump mca命令...
Linux記憶體 效能診斷中vmstat命令的詳解
vmstat命令是最常見的linux unix監控工具,可以展現給定時間間隔的伺服器的狀態值,包括伺服器的cpu使用率,記憶體使用,虛擬記憶體 交換情況,io讀寫情況。相比top,通過vmstat可以看到整個機器的 cpu,記憶體,io的使用情況,而不是單單看到各個程序的cpu使用率和記憶體使用率。...
WIN7系統記憶體診斷工具檢測記憶體問題
win7系統記憶體診斷工具檢測記憶體問題 路徑 控制面板 系統和安全 管理工具 windows 記憶體診斷 如果計算機的記憶體出現問題對系統的穩定性及正常使用會帶來很大的問題,例如說藍屏 宕機 應用程式無法正常執行等,此時除了使用提換法來確定記憶體故障以外我們還可以通過windows 記憶體診斷工具...