在不同的 Linux 發行版中,會有不同的 GUI 程式可以顯示各種系統資訊,比如 SUSE Linux 發行版中,就有非常棒的圖形化的配置和管理工具 YaST,KDE 桌面環境裏的 KDE System Guard 也很不錯。
然而,對於一名 Linux 系統管理員來説,除非迫不得已,否則不會在 Linux 站羣服務器上去執行這樣的 GUI 程式,主要還是因為 GUI 會佔用很多的系 統資源。所以呢,使用 GUI 工具一般都是做簡單的排查,如果你真的想知道系統裏真正發生了什麼,那麼請關掉你的 GUI,快點進入 Linux 命令列的世界 吧。
如果希望追求最佳效能,那麼 Linux 站羣服務器應該執行在 runlevel 3 級別,也就是支援互聯網和多使用者功能,但不支援 GUI 功能。如果你真的需要 GUI,那麼可以在命令列輸入 startx 進入 GUI 。
如果你的 Linux 系統預設就是進入 GUI,你可以調一調配置,讓他預設進入 runlevel 3 。具體方法就是:

1 開啓一個終端,su 到 root 賬號
2 用你喜歡的編輯器(vi/emacs/…)開啓/etc/inittab 檔案
3 查詢 initdefault 關鍵字,將 “id:5:initdefault:” 修改為 “id:3:initdefault:”

如果系統中根本就沒有/etc/inittab 檔案的話,也沒關係,直接建立這個檔案,並新增新的一行 “id:3” 。這樣的話,你再重啓站羣服務器,便會預設進入命令列狀態。當然,如果你只想在臨時進入命令列狀態,那麼直接在終端中輸入 “init 3” 就好了。
至此,我們的命令列準備好了,下面就可以開始通過強大的命令來檢視 “到底站羣服務器裏發生了什麼”:

[01 – iostat ]
[02/03 – meminfo/free ]
[04 – mpstat ]
[05 – netstat ]
[06 – nmon ]
[07 – pmap ]
[08/09 – ps/pstree ]
[10 – sar ]
[11 – strace ]
[12 – tcpdump ]
[13 – top ]
[14 – uptime ]
[15 – vmstat ]
[16 – wireshark ]

[01 – iostat]
iostat 命令顯示的是你的儲存系統的細節狀態。你通常可以用這個命令去檢測你的儲存裝置是否工作正常,
完全可以在使用者抱怨站羣服務器慢之前,通過這個命令發現系統 IO 方面的問題。
如下可以看到 iostat 既可以顯示 CPU 使用情況,也可以看到每個磁碟的 IO 情況。

# iostat 1
Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012 年 12 月 22 日 _i686_ (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 0.03 0.02 0.00 99.40

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sdb 0.41 2.61 5.76 2558664 5653872
sda 0.24 0.80 4.12 784650 4038344

[02/03 – meminfo/free]
meminfo 提供了很詳細的內存使用狀況。可以直接用 cat 命令檢視:

cat /proc/meminfo

當然 meminfo 裏包含了太多細節,你可以直接使用 free 命令來檢視有關內存的綜述。

# free -m
total used free shared buffers cached
Mem: 1513 1429 83 0 343 836
-/+ buffers/cache: 249 1263
Swap: 0 0 0

[04 – mpstat]
mpstat 用在多處理器的站羣服務器上,用來顯示每一個 CPU 的狀態。
另外,mpstat 也會顯示所有處理器的平均狀況。
你可以設定顯示每個站羣服務器的 CPU 統計資訊,或者每個處理的 CPU 統計資訊。

# mpstat -P ALL
Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012 年 12 月 22 日 _i686_ (4 CPU)

17 時 46 分 35 秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
17 時 46 分 35 秒 all 0.55 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.40
17 時 46 分 35 秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08
17 時 46 分 35 秒 1 0.51 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.44
17 時 46 分 35 秒 2 0.45 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.51
17 時 46 分 35 秒 3 0.40 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.56

# mpstat -P 0
Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012 年 12 月 22 日 _i686_ (4 CPU)

17 時 46 分 39 秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
17 時 46 分 39 秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08

其中各個域的含義簡述如下:

1 CPU:處理器編號,如果為 all,則此行表示的是所有處理器的統計平均值
2 %usr:使用者態的 CPU 利用率
3 %nice:具有排程優先順序的使用者態 CPU 利用率
4 %sys:核心態 CPU 利用率(此值不包括響應硬體中斷和站羣軟件中斷的時間)
5 %iowait:處理 IO 請求導致 CPU 處於 IDLE 狀態的時間百分比
6 %irq:CPU 響應硬體中斷的時間比率
7 %soft:CPU 響應站羣軟件中斷的時間比率
8 %steal:當虛擬機器監控器在服務於其他虛擬處理器時,虛擬 CPU 的被動等待時間比率
9 %guest:執行一個虛擬處理器所消耗的 CPU 時間比率

[05 – netstat]
netstat 命令,是 Linux 系統管理員幾乎每天都會用到的命令(它已經逐步在被 ss 命令取代),他可以顯示很多有關互聯網方面的資訊,例如 socket 使用情況、路由情況、網絡卡情況、協議情況、互聯網流量統計等等。
一些常用的 netstat 選項包括:

-a : 顯示所有 socke 資訊
-r : 顯示路由資訊
-i : 顯示網絡卡藉口統計
-s : 顯示互聯網協議統計

[06 – nmon]
nmon 是 Nigel’s Monitor 的縮寫,它是一個很知名的監視 Linux 系統效能的工具。
nmon 可以檢視到處理器利用率、內存使用率、執行佇列資訊、磁碟 IO 統計、互聯網 IO 統計、換頁統計等。
你可以通過一個基於 curses 的類 GUI 介面來檢視到上述資訊。

nmon 監控工具
[07 – pmap]
pmap 命令可以顯示程序佔用的內存量。
你可以通過 pmap 找到那個佔用內存量最多的程序。
如下就是 nignx 主程序所佔用的內存情況:

# pmap 2395|head -n 10
2395: nginx: master process ./sbin/nginx
00110000 240K r-x– /lib/libgssapi_krb5.so.2.2
0014c000 4K —– /lib/libgssapi_krb5.so.2.2
0014d000 4K r—- /lib/libgssapi_krb5.so.2.2
0014e000 4K rw— /lib/libgssapi_krb5.so.2.2
0014f000 12K r-x– /lib/libcom_err.so.2.1
00152000 4K r—- /lib/libcom_err.so.2.1
00153000 4K rw— /lib/libcom_err.so.2.1
00154000 48K r-x– /lib/libnss_files-2.12.so
00160000 4K r—- /lib/libnss_files-2.12.so

b78e4000 20K rw— [ anon ]
b78f3000 4K rw-s- /dev/zero (deleted)
b78f4000 4K rw— [ anon ]
bfeaa000 84K rw— [ stack ]
total 7280K

[08/09 – ps/pstree]
ps 和 pstree 在 Linux 系統裏是一對好兄弟,它們都是用來列出處於執行狀態的程序的列表的。
ps 告訴我們每個程序使用的內存量以及所消耗的 CPU 時間。
pstree 則會告訴我們程序間的父子關係,如下便是 mysql 的一些父子關係資訊:

# pstree -p 1829
mysqld_safe(1829)───mysqld(2307)─┬─{mysqld}(2309)
├─{mysqld}(2310)
├─{mysqld}(2311)
├─{mysqld}(2312)
├─{mysqld}(2313)
├─{mysqld}(2314)
├─{mysqld}(2315)
├─{mysqld}(2316)
├─{mysqld}(2317)
├─{mysqld}(2318)
├─{mysqld}(2320)
├─{mysqld}(2321)
├─{mysqld}(2322)
├─{mysqld}(2323)
├─{mysqld}(2325)
├─{mysqld}(2544)
├─{mysqld}(2548)
├─{mysqld}(7912)
├─{mysqld}(7914)
├─{mysqld}(7916)
├─{mysqld}(24689)
├─{mysqld}(27329)
└─{mysqld}(27331)

[10 – sar]
sar 命令堪稱系統監控工具裏的瑞士軍刀。
sar 命令實際上是由三個程式組成的,即 sar(用於顯示資料)、 sa1(用於採集資料) 和 sa2(用於儲存資料)。
sar 可以涵蓋到 CPU 利用率資訊、內存換頁資訊、互聯網 IO 傳輸資訊、程序建立行為和儲存裝置行為。
sar 和 nmon 的最大區別在於,sar 更適用於長期的系統監控,而 nmon 則更適用於快速檢視資訊。
如果希望更詳細的學習 sar 命令,可以閲讀《sar 訪談》-linux 命令五分鐘系列之二十九。
[11 – strace]
starce 經常被用來作為追查程式問題的工具,但他的功能遠非如此。
它可以解析和記錄程序的系統呼叫行為,這使得 strace 成為了一個非常有用的診斷、調查和糾錯工具。
舉例來説,你可以適用 strace 來追查到一個程式在啓動之初所需載入的配置檔案資訊。
當然,strace 也有它自身的缺陷,那就是 strace 會嚴重拖慢調查物件(某個程序)的效能和執行速度。
順便推薦一篇非常好的 strace 的文章:《strace 使用詳解》
另外,如果你使用 MAC,strace 的替代品是 truss 。
[12 – tcpdump]
tcpdump 是一個簡單的、好用的互聯網監控工具。它的互聯網協議分析能力使得它能夠看清互聯網中到底發生了什麼,如果你希望更細節的調查的話,可以考慮適用功能更為強大的 wireshark 工具。
tcpdump 的系列教程 “在這裏” 。
[13 – top]
top 命令可以顯示系統中的程序資訊。預設情況下,top 會按照 CPU 使用率從高到低來顯示系統中的程序,並且每 5 秒重新整理一次排行榜。
當然,你也可以讓 top 按照 PID 、程序壽命、 CPU 耗時、內存消耗等維度對程序進行排序。(我經常使用的是 P 和 M 快捷鍵,分別是按 CPU 利用率排序、按內存使用量排序)
通過 top 命令,你可以很快的發現那些失去控制或不符合預期的程序。
[14 – uptime]
通過 uptime 命令可以檢視系統已經執行了多久,可以統計當前處於登陸狀態的使用者數量,還可以顯示當前站羣服務器的負載情況。

# uptime
18:35:17 up 11 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00

[15 – vmstat]
大多數情況下,你可以使用 vmstat 命令去檢視系統的虛擬內存情況,因為 Linux 通常會通過虛擬內存來獲得更好的儲存效能。
如果你的程式佔用了大量了內存,那麼系統會進行內存頁換出的動作,以便把程式從內存中移動到系統 SWAP 空間中,也就是硬碟中。
如果系統的內存頁的換入換出動作頻度超過一個臨界值,那麼這種狀態被叫做 “Thrashing” 。當系統處於 thrashing 狀態時,效能會急劇下降。
vmstat 命令便可以幫助人們及時發現此類問題,找出那個拖慢系統的元兇。

# vmstat 1
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 57484 356864 861332 0 0 0 1 7 3 1 0 99 0 0
0 0 0 57468 356864 861360 0 0 0 0 336 145 6 1 94 0 0
0 0 0 57468 356864 861360 0 0 0 0 43 51 0 0 100 0 0
0 0 0 57468 356864 861360 0 0 0 16 51 62 0 0 100 0 0

[16 – wireshark]
Wireshark 的前身叫做 Ethereal, 我們可以認為 wireshark 是 tcpdump 命令的大師兄,因為 wireshark 會更為專業,也具有更高階的協議分析和統計能力。
Wireshark 同時具有 GUI 介面和 shell 藉口。
如果你是一位資深的互聯網管理員,那麼你一定使用過 ethereal 。而如果你正在使用 wireshark/ethereal,那麼我推薦你閲讀 Chris Sander 的一本非常好的書《Practical Packet Analysis》。
謝謝!

原文連結:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.techug.com%2F