天天看點

記憶體和swap檢視 記憶體是拿來用的 不是看的

記憶體和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&gt;/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&lt;=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&lt;1024)

           printf("%-10s\t%15sKB\t%s\n",$1,$2,$3);

        else if($2&lt;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&gt;0 || $6&gt;0{print}'|sort -k6 -n | awk '!/\$/{

        if($6&lt;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&lt;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

繼續閱讀