記憶體和swap的檢視 和腳本
記憶體的檢視可以是 free top等
free 檢視系統的全部記憶體使用情況
top 可以檢視全部使用情況和單個程式的消耗
free
常用參數
b 以位元組為機關顯示。
-k 以K位元組為機關顯示。預設顯示。
-m 以兆位元組為機關顯示。
-s 每隔多少秒重複執行。可編寫一個腳本用于監控。
顯示的狀态如下:
<a href="http://s3.51cto.com/wyfs02/M02/74/F1/wKioL1YvIefghnr9AACHOBkYzCU093.jpg" target="_blank"></a>
其中:
第一行 total 995 指伺服器的總記憶體的大小
used 923 指已經配置設定的記憶體的大小 (包含buffers 與cache )使用的數量,但其中可能部分緩存并未實際使用。
free 71 指未配置設定的記憶體。
shared 0 指共享記憶體的大小,一般系統不會用到。
buffers 202 指系統配置設定但未被使用的buffers 數量。
cached 417 指系統配置設定但未被使用的cached數量
第二行
-/+ buffers/cache的意思:
-buffers/cache 的記憶體數: 303 (等于第1行的 used - buffers - cached)
+buffers/cache 的記憶體數: 691 (等于第1行的 free + buffers + cached)
注:此處的記憶體數在用上面式子計算後,在大小上有一點點出入(還不知道是什麼原因)。
可見-buffers/cache反映的是被程式實實在在吃掉的記憶體,而+buffers/cache反映的是可以挪用的記憶體總數。
buffers與cached的差別:
buffers是用來給塊裝置做的緩沖大小,他隻記錄檔案系統的metadata以及 tracking in-flight pages。
cached用來給檔案做緩沖。
即:buffers是用來存儲目錄裡面有什麼内容,權限等等,而cached用來記憶我們打開的檔案.
第三行
swap的使用情況 當swap使用的較多的時候證明記憶體不夠用,跟虛拟記憶體頻繁交換。
對于 第一部分(Mem)與第二部分(-/+ buffers/cache)
其實我們可以從二個方面來解釋.
對作業系統來講是Mem的參數.buffers/cached 都是屬于被使用,是以它認為free隻有71.
對應用程式來講是(-/+ buffers/cach).buffers/cached 是等同可用的,因為buffer/cached是為了提高程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用。
是以,以應用來看看,以(-/+buffers/cache)的free和used為主.是以我們看這個就好了.另外告訴大家一些常識.Linux為了提高磁盤和記憶體存取效率,Linux做了很多精心的設計, 除了對dentry進行緩存(用于VFS,加速檔案路徑名到inode的轉換),還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,後者針對檔案inode的讀寫。這些Cache能有效縮短了I/O系統調用(比如read,write,getdents)的時間。
記住記憶體是拿來用的,不是拿來看的.不像windows,無論你的真實實體記憶體有多少,他都要拿硬碟交換檔案來讀.這也就是windows為什麼常常提示虛拟空間不足的原因.你們想想,多無聊,在記憶體還有大部分的時候,拿出一部分硬碟空間來充當記憶體.硬碟怎麼會快過記憶體.是以,我們看linux,隻要不用swap的交換空間,就不用擔心自己的記憶體太少.如果常常swap用很多,可能你就要考慮加實體記憶體了.這也是linux看記憶體是否夠用的标準哦.
top
top的參數就不說了 現在說下與記憶體相關的東西:
<a href="http://s3.51cto.com/wyfs02/M02/74/F1/wKioL1YvKGjzZSTUAASR2Y33lpk206.jpg" target="_blank"></a>
其中
VIRT 是配置設定記憶體的大小,并不是真實使用的大小
RES 是真正使用的記憶體的大小,是真實使用的
下面是檢視記憶體 swap 的腳本
#!/bin/bash
###############################################################################
# 日期 : 2015-09-10
# 作者 : wangtenghe
# Email : [email protected]
# 版本 : 2.0
# 腳本功能 : 列出正在占用swap的程序。
# 調用關系 :
# 其他說明 :
echo -e "PID\t\tSwap\t\tProc_Name"
for pid in `ls -l /proc | grep ^d | awk '{ print $9 }'| grep -v [^0-9]`
do
if [ $pid -eq 1 ];then continue;fi # Do not check init process
grep -q "Swap" /proc/$pid/smaps 2>/dev/null
if [ $? -eq 0 ];then
swap=$(gawk '/Swap/{ sum+=$2;} END{ print sum }' /proc/$pid/smaps)
proc_name=$(ps aux | grep -w "$pid" | awk '!/grep/{ for(i=11;i<=NF;i++){ printf("%s ",$i); }}')
if [ $swap -gt 0 ];then
echo -e "$pid\t${swap}\t$proc_name"
fi
done | sort -k2 -n | gawk -F'\t' '{
if($2<1024)
printf("%-10s\t%15sKB\t%s\n",$1,$2,$3);
else if($2<1048576)
printf("%-10s\t%15.2fMB\t%s\n",$1,$2/1024,$3);
else
printf("%-10s\t%15.2fGB\t%s\n",$1,$2/1048576,$3);
}'
#! /bin/bash
# 日期 : 2015-09-14
# 版本 :1.0
# 腳本功能 : 列出正在記憶體和cpu使用率的大小、PID和程式
ps -aux | awk '$3>0 || $6>0{print}'|sort -k6 -n | awk '!/\$/{
if($6<1024)
printf("%-10s\t%10s%15.2fKB\t%s%s%s%s%s\n",$2,$3,$6,$11" ",$12" ",$13" ",$14" ",$15);
else if($6<1048576)
printf("%-10s\t%10s%15.2fMB\t%s%s%s%s%s\n",$2,$3,$6/1024,$11" ",$12" ",$13" ",$14" ",$15);
printf("%-10s\t%10s%15.2fGB\t%s%s%s%s%s\n",$2,$3,$6/1048576,$11" ",$12" ",$13" ",$14" ",$15);
fi
}'
echo -e "PID\t\t\tCPU%\t\tMEM\tProc_Name"
本文轉自 憬薇 51CTO部落格,原文連結:http://blog.51cto.com/welcomeweb/1706782