在不同的 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