寫在前面的話:本文是假設你已經有了進程、內存、cpu的理論基礎而寫的,文中涉及的各類狀態只給出了簡單說明而沒有解釋它們的意義,若是不懂這些理論性的東西,本文可能讓你看的直接想右上角叉叉。關於這些理論,能夠閱讀我另外一篇文章:http://www.cnblogs.com/f-ck-need-u/p/7058920.htmlhtml
在Linux中查看各類狀態,其實質是查看內核中相關進程的數據結構中的項,經過工具將其格式化後輸出出來。可是內核的數據是絕對不能隨意查看或更改的,至少不能直接去修改。因此,在linux上出現了僞文件系統/proc,它是內核中各屬性或狀態向外提供訪問和修改的接口。前端
在/proc下,記錄了內核本身的數據信息,各進程獨立的數據信息,統計信息等。絕大多數文件都是隻讀不可改的,即便對root也同樣,但/proc/sys除外,爲什麼如此稍後解釋。linux
其中數字命名的目錄對應的是各進程的pid號,其內的文件記錄的都是該進程當前的數據信息,且都是隻讀的,例如記錄命令信息的cmdline文件,進程使用哪顆cpu信息cpuset,進程佔用內存的信息mem文件,進程IO信息io文件等其餘各類信息文件。ios
[root@xuexi ~]# ls /proc/6982 attr clear_refs cpuset fd loginuid mounts numa_maps pagemap schedstat stat task autogroup cmdline cwd fdinfo maps mountstats oom_adj personality sessionid statm wchan auxv comm environ io mem net oom_score root smaps status cgroup coredump_filter exe limits mountinfo ns oom_score_adj sched stack syscall
非數字命名的目錄各有用途,例如bus表示總線信息,driver表示驅動信息,fs表示文件系統特殊信息,net表示網絡信息,tty表示跟物理終端有關的信息,最特殊的兩個是/proc/self和/proc/sys。shell
先說/proc/self目錄,它表示的是當前正在訪問/proc目錄的進程,由於/proc目錄是內核數據向外記錄的接口,因此當前訪問/proc目錄的進程表示的就是當前cpu正在執行的進程。若是執行cat /proc/self/cmdline,會發現其結果老是該命令自己,由於cat是手動敲入的命令,它是重要性進程,cpu會當即執行該命令。windows
再說/proc/sys這個目錄,該目錄是爲管理員提供用來修改內核運行參數的,因此該目錄中的文件對root都是可寫的,例如管理數據包轉發功能的/proc/sys/net/ipv4/ip_forward文件。使用sysctl命令修改內核運行參數,其本質也是修改/proc/sys目錄中的文件。緩存
pstree命令將以樹的形式顯示進程信息,默認樹的分支是收攏的,也不顯示pid,要顯示這些信息須要指定對應的選項。bash
pstree [-a] [-c] [-h] [-l] [-p] [pid] 選項說明: -a:顯示進程的命令行 -c:展開分支 -h:高亮當前正在運行的進程及其父進程 -p:顯示進程pid,此選項也將展開分支 -l:容許顯示長格式進程。默認在顯示結果中超過132個字符時將截斷後面的字符。
例如:網絡
ps命令查看當前這一刻的進程信息,注意查看的是靜態進程信息,要查看隨時刷新的動態進程信息(如windows的進程管理器那樣,每秒刷新一次),使用top或htop命令。session
這個命令的man文檔及其複雜,它同時支持3種類型的選項:GUN/BSD/UNIX,不一樣類型的選項其展現的信息格式不同。有些加了"-"的是SysV風格 的選項,不加"-"的是BSD選項,加不加"-"它們的意義是不同的,例如ps aux 和ps -aux是不一樣的。
其實只需掌握少數幾個選項便可,關鍵的是要了解ps顯示出的進程信息中每一列表明什麼屬性。
對於BSD風格的選項,只需知道一個用法ps aux足以,選項"a"表示列出依賴於終端的進程,選項"x"表示列出不依賴於終端的進程,因此二者結合就表示列出全部進程,選項"u"表示展示的進程信息是以用戶爲導向的,不用管它什麼是以用戶爲導向,用ps aux就沒錯。
[root@server2 ~]# ps aux | tail USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1340 0.0 0.0 27176 588 ? Ss 20:30 0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid root 2266 0.0 0.1 93212 2140 ? Ss 20:30 0:00 /usr/libexec/postfix/master -w postfix 2268 0.0 0.2 93384 3992 ? S 20:30 0:00 qmgr -l -t unix -u postfix 2306 0.0 0.2 93316 3972 ? S 20:31 0:00 pickup -l -t unix -u root 2307 0.0 0.2 145552 5528 ? Ss 20:31 0:00 sshd: root@pts/0 root 2309 0.0 0.0 0 0 ? S< 20:31 0:00 [kworker/3:1H] root 2310 0.0 0.1 116568 3184 pts/0 Ss 20:31 0:00 -bash root 2352 0.0 0.0 0 0 ? S< 20:31 0:00 [kworker/1:2H] root 2355 0.0 0.0 139492 1632 pts/0 R+ 20:34 0:00 ps aux root 2356 0.0 0.0 107928 676 pts/0 R+ 20:34 0:00 tail
各列的意義:
對於BSD風格的ps選項,進程的狀態還會顯示下面幾個組合信息。
注意到了沒,ps aux沒有顯示出ppid。
另外經常使用的ps選項是ps -elf。其中"-e"表示輸出所有進程信息,"-f"和"-l"分別表示全格式輸出和長格式輸出。全格式會輸出cmd的所有參數。
[root@server2 ~]# ps -lf F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S postfix 2306 2266 0 80 0 - 23329 ep_pol 20:31 ? 00:00:00 pickup -l -t unix -u 4 S root 2307 1141 0 80 0 - 36388 poll_s 20:31 ? 00:00:00 sshd: root@pts/0
1 S root 2309 2 0 60 -20 - 0 worker 20:31 ? 00:00:00 [kworker/3:1H] 4 S root 2310 2307 0 80 0 - 29142 wait 20:31 pts/0 00:00:00 -bash 1 S root 2433 2 0 60 -20 - 0 worker 21:21 ? 00:00:00 [kworker/1:1H] 1 S root 2479 2 0 80 0 - 0 worker 21:25 ? 00:00:00 [kworker/1:0] 1 S root 2503 2 0 60 -20 - 0 worker 21:28 ? 00:00:00 [kworker/1:2H] 1 S root 2532 2 0 80 0 - 0 worker 21:30 ? 00:00:00 [kworker/1:1] 0 R root 2539 2310 0 80 0 - 34873 - 21:33 pts/0 00:00:00 ps -elf 0 S root 2540 2310 0 80 0 - 26982 pipe_w 21:33 pts/0 00:00:00 tail
各列的意義:
在ps後加上grep篩選目標進程時,總會發現grep自身進程也被顯示出來。
[root@xuexi ~]# ps aux | grep "crond" root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond root 8275 0.0 0.0 103256 856 pts/2 S+ 17:07 0:00 grep crond
先解釋下爲什麼會如此。管道是bash建立的,bash建立管道後fork兩個子進程,而後兩子進程各自exec加載ps程序和grep程序,exec以後這兩個子進程就稱爲ps進程和grep進程,因此ps和grep進程幾乎能夠認爲是同時出現的,儘管ps進程做爲管道的首進程(進程組首進程)它是先出現的,可是在ps出現以前確實兩個進程都已經fork完成了。也就是說,管道左右兩端的進程是同時被建立的(不考慮父進程建立進程消耗的那點時間),但數據傳輸是有前後順序的,左邊先傳,右邊後收。
要將grep自身進程排除在結果以外,方法有二:
[root@xuexi ~]# ps aux | grep "crond" | grep -v "grep" # 使用-v將grep本身篩選掉 root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond [root@xuexi ~]# ps aux | grep "cron[d]" root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
第二種方法能成功是由於grep進程被ps捕獲時的結果是"grep cron[d]",而使用cron[d]匹配時,它將只能匹配crond,因此"grep cron[d]"被篩選掉了。其實加上其餘字符將更容易理解。
[root@xuexi ~]# ps aux | grep "cron[dabc]" root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
[root@xuexi ~]# uptime 08:38:11 up 22:35, 2 users, load average: 0.00, 0.01, 0.05
顯示當前時間,已開機運行多少時間,當前有多少用戶已登陸系統,以及3個平均負載值。
所謂負載率(load),即特定時間長度內,cpu運行隊列中的平均進程數(包括線程),通常平均每分鐘每核的進程數小於3都認爲正常,大於5時負載已經很是高。在UNIX系統中,運行隊列包括cpu正在執行的進程和等待cpu的進程(即所謂的可運行runable)。在Linux系統中,還包括不可中斷睡眠態(IO等待)的進程。運行隊列中每出現一個進程,load就加1,進程每退出運行隊列,Load就減1。若是是多核cpu,則還要除以核數。
詳細信息見man uptime和https://en.wikipedia.org/wiki/Load_(computing)
例如,單核cpu上的負載值爲"1.73 0.60 7.98"時,表示:
最近1分鐘:1.73表示平都可運行的進程數,這一分鐘要一直不斷地執行這1.73個進程。0.73個進程等待該核cpu。
最近5分鐘:平均進程數還不足1,表示該核cpu在過去5分鐘空閒了40%的時間。
最近15分鐘:7.98表示平都可運行的進程數,這15分鐘要一直不斷地執行這7.98個進程。
結合前5分鐘的結果,說明前15-前10分鐘時間間隔內,該核cpu的負載很是高。
若是是多核cpu,則還要將結果除以核數。例如4核時,某個最近一分鐘的負載值爲3.73,則意味着有3.73個進程在運行隊列中,這些進程可被調度至4核中的任何一個核上運行。最近1分鐘的負載值爲1.6,表示這一分鐘內每核cpu都空閒(1-1.6/4)=60%的時間。
因此,load的理想值是正好等於CPU的核數,小於核數的時候表示cpu有空閒,超出核數的時候表示有進程在等待cpu,即系統資源不足。
top命令查看動態進程狀態,默認每5秒刷新一次。
top選項說明:
-d:指定top刷新的時間間隔,默認是5 秒 -b:批處理模式,每次刷新分批顯示 -n:指定top刷新幾回就退出,能夠配合-b使用 -p:指定監控的pid,指定方式爲-pN1 -pN2 ...或-pN1, N2 [,...] -u:指定要監控的用戶的進程,能夠是uid也能夠是user_name
在top動態模式下,按下各類鍵能夠進行不一樣操做。使用"h"或"?"能夠查看相關鍵的說明。
如下是top的一次結果。
[root@xuexi ~]# top top - 17:43:44 up 1 day, 14:16, 2 users, load average: 0.10, 0.06, 0.01 Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1004348k total, 417928k used, 586420k free, 52340k buffers Swap: 2047996k total, 0k used, 2047996k free, 243800k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19364 1444 1132 S 0.0 0.1 0:00.96 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:01.28 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.59 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
top命令雖然很是強大,可是太老了。因此有了新生代的top命令htop。htop默認沒有安裝,須要手動安裝。
[root@xuexi ~]# yum -y install htop
htop可使用鼠標完成點擊選中。其餘使用方法和top相似,使用h查看各按鍵意義便可。
iftop用於動態顯示網絡接口的數據流量。用法也很簡單,按下h鍵便可獲取幫助。
根據前文uptime中對系統負載(system load)的描述,分析一下這個top的結果。
上圖中,系統負載很是之高,最近一分鐘的負載量高達383.19,這表示這一分鐘有383.19個進程正在運行或等待調度,若是是單核CPU,表示這一分鐘要絕不停留地執行這麼多進程,若是是8核CPU,表示這一分鐘內平均每核心CPU要執行大概50個進程。
從load average上看,確實是很是繁忙的場景。可是看CPU的idle值爲98.8,說明CPU很是閒。爲何系統負載如此高,CPU卻如此閒?
前面解釋system load average的時候,已經說明過可運行的(就緒態,即就緒隊列的長度)、正在運行的(運行態)和不可中斷睡眠(如IO等待)的進程任務都會計算到負載中。如今負載高、CPU空閒,說明當前正在執行的任務基本不消耗CPU資源,大量的負載進程都在IO等待中。
能夠從ps的進程狀態中獲取哪些進程是正在運行或運行隊列中的(狀態爲R),哪些進程是在不可中斷睡眠中的(狀態爲D)。
[root@xuexi src]# ps -eo stat,pid,ppid,comm --no-header |grep -E "^(D|R)" R+ 11864 9624 ps
注意vmstat的第一次統計是自開機起的平均值信息,從第二次開始的統計纔是指定刷新時間間隔內的資源利用信息,若不指定刷新時間間隔,則默認只顯示一次統計信息。
vmstat [-d] [delay [ count]] vmstat [-f] 選項說明: -f:統計自開機起fork的次數。包括fork、clone、vfork的次數。但不包括exec次數。 -d:顯示磁盤統計信息。 delay:刷新時間間隔,若不指定,則只統計一次信息就退出vmstat。 count:總共要統計的次數。
例如,只統計一次信息。
[root@xuexi ~]# vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 583692 52684 244200 0 0 5 3 4 5 0 0 100 0 0
其中各列的意義以下:
Procs
Memory
Swap
IO
System
CPU:統計的是cpu時間百分比,具體信息和top的cpu統計列同樣
還能夠統計磁盤的IO信息。統計信息的結果很容易看懂,因此略過。
iostat主要統計磁盤或分區的總體使用狀況。也能夠輸出cpu信息,甚至是NFS網絡文件系統的信息。同vmstat/sar同樣,第一次統計的都是自系統開機起的平均統計信息。
iostat [ -c ] [ -d ] [ -n -h ][ -k | -m ] [ -p [device][,...] ] [ interval [ count ] ] 選項說明: -c:統計cpu信息 -d:統計磁盤信息 -n:統計NFS文件系統信息 -h:使NFS統計信息更人類可讀化 -k:指定以kb/s爲單位顯示 -m:指定以mb/s爲單位顯示 -p:指定要統計的設備名稱 -y:指定不顯示第一次統計信息,即不顯示自開機起的統計信息。 interval:刷新時間間隔 count:總統計次數
例如:
[root@xuexi ~]# iostat Linux 2.6.32-504.el6.x86_64 (xuexi.longshuai.com) 06/11/2017 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.00 0.03 0.01 0.00 99.96 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 0.58 39.44 23.14 5557194 3259968 sdb 0.00 0.03 0.00 4256 0
各列的意義都很清晰,從字面便可理解。
sar是一個很是強大的性能分析工具,它能夠獲取系統的cpu/等待隊列/磁盤IO/內存/網絡等性能指標。
功能多的必然結果是選項多,應用複雜,但只要知道一些經常使用的選項足以。
sar [options] [-o filename] [delay [count] ] 選項說明: -A:顯示系統全部資源運行情況 -b:顯示磁盤IO和tranfer速率信息,和iostat的信息同樣,是整體IO統計信息 -d:顯示磁盤在刷新時間間隔內的活躍狀況,能夠指定一個或多個設備,和-b不一樣的是,它顯示的是單設備的IO、transfer信息。 :建議配合-p使用顯示友好的設備名,不然默認顯示帶主次設備號的設備名 -P:顯示指定的某顆或某幾顆cpu的使用狀況。指定方式爲,-P 0,1,2,3或ALL。 -u:顯示每顆cpu總體平均使用狀況。-u和-P的區別經過下面的示例很容易區分。 -r:顯示內存在刷新時間間隔內的使用狀況 -n:顯示網絡運行狀態。後可接DEV/NFS/NFSD/ALL等多種參數。 :DEV表示顯示網路接口信息,NFS和NFSD分別表示顯示NFS客戶端服務端的流量信息,ALL表示顯示全部信息。 -q:顯示等待隊列大小 -o filename:將結果存入到文件中 delay:狀態刷新時間間隔 count:總共刷新幾回
[root@server2 ~]# sar -P ALL 1 2 Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU) 01:18:49 AM CPU %user %nice %system %iowait %steal %idle 01:18:50 AM all 0.00 0.00 0.25 0.00 0.00 99.75
01:18:50 AM 0 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 1 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 2 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 3 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM CPU %user %nice %system %iowait %steal %idle 01:18:51 AM all 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 0 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 1 0.00 0.00 0.99 0.00 0.00 99.01
01:18:51 AM 2 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 3 0.00 0.00 0.00 0.00 0.00 100.00 Average: CPU %user %nice %system %iowait %steal %idle Average: all 0.00 0.00 0.12 0.00 0.00 99.88 Average: 0 0.00 0.00 0.00 0.00 0.00 100.00 Average: 1 0.00 0.00 0.50 0.00 0.00 99.50 Average: 2 0.00 0.00 0.00 0.00 0.00 100.00 Average: 3 0.00 0.00 0.00 0.00 0.00 100.00
各列的意義就再也不贅述了,在前面幾個信息查看命令已經解釋過屢次了。
在上面的例子中,統計了全部cpu(0,1,2,3共4顆)每秒的狀態信息,每秒還進行了一次彙總,即all,最後還對每顆cpu和彙總all計算了平均值。而咱們真正須要關注的是最後的average部分的idle值,idle越小,說明cpu處於空閒時間越少,該顆或總體cpu使用率就越高。
或者直接對總體進行統計。以下:
[root@server2 ~]# sar -u 1 2 Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU) 01:18:37 AM CPU %user %nice %system %iowait %steal %idle 01:18:39 AM all 0.00 0.00 0.00 0.00 0.00 100.00
01:18:40 AM all 0.00 0.00 0.23 0.00 0.00 99.77 Average: all 0.00 0.00 0.12 0.00 0.00 99.88
其中kbdirty表示內存中髒頁的大小,即內存中還有多少應該刷新到磁盤的數據。
第一種方法是查看/proc/net/dev文件。
關注列:receive和transmit分別表示收包和發包,關注每一個網卡的bytes便可得到網卡的狀況。寫一個腳本計算每秒的差值即爲網絡流量。
或者使用sar -n命令統計網卡接口的數據。
[root@server2 ~]# sar -n DEV 1 2 Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU) 01:51:11 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 01:51:12 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:51:12 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:51:12 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 01:51:13 AM eth0 0.99 0.99 0.06 0.41 0.00 0.00 0.00
01:51:13 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: eth0 0.50 0.50 0.03 0.21 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
各列的意義以下:
[root@server2 ~]# sar -q Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU) 12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 12:10:01 AM 0 446 0.01 0.02 0.05 0
12:20:01 AM 0 445 0.02 0.03 0.05 0
12:30:01 AM 0 446 0.00 0.01 0.05 0 Average: 0 446 0.01 0.02 0.05 0
每列意義解釋:
[root@server2 ~]# sar -d -p 1 2 Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU) 12:53:06 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 12:53:07 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 12:53:07 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 12:53:08 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
分別統計的是12:53:06到12:53:07和12:53:07到12:53:08這兩秒的IO使用狀況。
各列的意義以下:
free用於查看內存使用狀況。CentOS 6和CentOS 7上顯示格式不太同樣。
free [options] 選項說明: -h:人類可讀方式顯式單位 -m:以MB爲顯示單位 -w:將buffers和cache分開單獨顯示。只對CentOS 7上有效 -s:動態查看內存信息時的刷新時間間隔 -c:一共要刷新多少次退出free
如下以CentOS 7上的free結果說明各列的意義。
[root@server2 ~]# free -m total used free shared buff/cache available Mem: 1824 131 1286 8 407 1511 Swap: 1999 0 1999
Mem和Swap分別表示物理內存和交換分區的使用狀況。
因此available纔是真正須要關注的可以使用內存空間量。
使用-w能夠將buffers/cache分開顯示。
[root@server2 ~]# free -w -m total used free shared buffers cache available Mem: 1824 131 1286 8 0 406 1511 Swap: 1999 0 1999
還能夠動態統計內存信息,例如每秒統計一次,統計2次。
[root@server2 ~]# free -w -m -s 1 -c 2 total used free shared buffers cache available Mem: 1824 130 1287 8 0 406 1512 Swap: 1999 0 1999 total used free shared buffers cache available Mem: 1824 130 1287 8 0 406 1512 Swap: 1999 0 1999
如下是CentOS 6上的free結果。
[root@xuexi ~]# free -m total used free shared buffers cached Mem: 980 415 565 0 53 239
-/+ buffers/cache: 121 859 Swap: 1999 0 1999
在此結果中,"-/+ buffers/cache"的free列纔是真正可用的內存空間了,即CentOS 7上的available列。
通常來講,內存可用量的範圍低於20%應該要引發注意了。