在不同的Linux發(fā)行版中,會有不同的GUI程序可以顯示各種系統(tǒng)信息,比如SUSE Linux發(fā)行版中,就有非常棒的圖形化的配置和管理工具YaST,KDE桌面環(huán)境里的KDE System Guard也很不錯。
然而,對于一名Linux系統(tǒng)管理員來說,除非迫不得已,否則不會在Linux服務器上去運行這樣的GUI程序,主要還是因為GUI會占用很多的系統(tǒng)資源。所以呢,使用GUI工具一般都是做簡單的排查,如果你真的想知道系統(tǒng)里真正發(fā)生了什么,那么請關掉你的GUI,快點進入Linux命令行的世界吧。
如果希望追求最佳性能,那么Linux服務器應該運行在runlevel 3級別,也就是支持網(wǎng)絡和多用戶功能,但不支持GUI功能。如果你真的需要GUI,那么可以在命令行輸入startx進入GUI。
如果你的Linux系統(tǒng)默認就是進入GUI,你可以調(diào)一調(diào)配置,讓他默認進入runlevel 3。具體方法就是:
- 1 打開一個終端,su到root賬號
- 2 用你喜歡的編輯器(vi/emacs/...)打開/etc/inittab文件
- 3 查找initdefault關鍵字,將“id:5:initdefault:”修改為“id:3:initdefault:”
如果系統(tǒng)中根本就沒有/etc/inittab文件的話,也沒關系,直接創(chuàng)建這個文件,并添加新的一行“id:3”。這樣的話,你再重啟服務器,便會默認進入命令行狀態(tài)。當然,如果你只想在臨時進入命令行狀態(tài),那么直接在終端中輸入“init 3”就好了。
至此,我們的命令行準備好了,下面就可以開始通過強大的命令來查看“到底服務器里發(fā)生了什么”:
- [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命令顯示的是你的存儲系統(tǒng)的細節(jié)狀態(tài)。你通??梢杂眠@個命令去檢測你的存儲設備是否工作正常,
完全可以在用戶抱怨服務器慢之前,通過這個命令發(fā)現(xiàn)系統(tǒng)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提供了很詳細的內(nèi)存使用狀況。可以直接用cat命令查看:
- cat /proc/meminfo
當然meminfo里包含了太多細節(jié),你可以直接使用free命令來查看有關內(nèi)存的綜述。
- # 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的狀態(tài)。
另外,mpstat也會顯示所有處理器的平均狀況。
你可以設置顯示每個服務器的CPU統(tǒng)計信息,或者每個處理的CPU統(tǒng)計信息。
# 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,則此行表示的是所有處理器的統(tǒng)計平均值
- 2 %usr:用戶態(tài)的CPU利用率
- 3 %nice:具有調(diào)度優(yōu)先級的用戶態(tài)CPU利用率
- 4 %sys:內(nèi)核態(tài)CPU利用率(此值不包括響應硬件中斷和軟件中斷的時間)
- 5 %iowait:處理IO請求導致CPU處于IDLE狀態(tài)的時間百分比
- 6 %irq:CPU響應硬件中斷的時間比率
- 7 %soft:CPU響應軟件中斷的時間比率
- 8 %steal:當虛擬機監(jiān)控器在服務于其他虛擬處理器時,虛擬CPU的被動等待時間比率
- 9 %guest:運行一個虛擬處理器所消耗的CPU時間比率
[05 - netstat]
netstat命令,是Linux系統(tǒng)管理員幾乎每天都會用到的命令(它已經(jīng)逐步在被ss命令取代),他可以顯示很多有關網(wǎng)絡方面的信息,例如socket使用情況、路由情況、網(wǎng)卡情況、協(xié)議情況、網(wǎng)絡流量統(tǒng)計等等。
一些常用的netstat選項包括:
- -a : 顯示所有socke信息
- -r : 顯示路由信息
- -i : 顯示網(wǎng)卡借口統(tǒng)計
- -s : 顯示網(wǎng)絡協(xié)議統(tǒng)計
[06 - nmon]
nmon是Nigel’s Monitor的縮寫,它是一個很知名的監(jiān)視Linux系統(tǒng)性能的工具。
nmon可以查看到處理器利用率、內(nèi)存使用率、運行隊列信息、磁盤IO統(tǒng)計、網(wǎng)絡IO統(tǒng)計、換頁統(tǒng)計等。
你可以通過一個基于curses的類GUI界面來查看到上述信息。
nmon監(jiān)控工具
[07 - pmap]
pmap命令可以顯示進程占用的內(nèi)存量。
你可以通過pmap找到那個占用內(nèi)存量最多的進程。
如下就是nignx主進程所占用的內(nèi)存情況:
# 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系統(tǒng)里是一對好兄弟,它們都是用來列出處于運行狀態(tài)的進程的列表的。
ps告訴我們每個進程使用的內(nèi)存量以及所消耗的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命令堪稱系統(tǒng)監(jiān)控工具里的瑞士軍刀。
sar命令實際上是由三個程序組成的,即sar(用于顯示數(shù)據(jù))、sa1(用于采集數(shù)據(jù))和sa2(用于存儲數(shù)據(jù))。
sar可以涵蓋到CPU利用率信息、內(nèi)存換頁信息、網(wǎng)絡IO傳輸信息、進程創(chuàng)建行為和存儲設備行為。
sar和nmon的最大區(qū)別在于,sar更適用于長期的系統(tǒng)監(jiān)控,而nmon則更適用于快速查看信息。
如果希望更詳細的學習sar命令,可以閱讀《sar訪談》-linux命令五分鐘系列之二十九。
[11 - strace]
starce經(jīng)常被用來作為追查程序問題的工具,但他的功能遠非如此。
它可以解析和記錄進程的系統(tǒng)調(diào)用行為,這使得strace成為了一個非常有用的診斷、調(diào)查和糾錯工具。
舉例來說,你可以適用strace來追查到一個程序在啟動之初所需加載的配置文件信息。
當然,strace也有它自身的缺陷,那就是strace會嚴重拖慢調(diào)查對象(某個進程)的性能和運行速度。
順便推薦一篇非常好的strace的文章:《strace使用詳解》
另外,如果你使用MAC,strace的替代品是truss。
[12 - tcpdump]
tcpdump是一個簡單的、好用的網(wǎng)絡監(jiān)控工具。它的網(wǎng)絡協(xié)議分析能力使得它能夠看清網(wǎng)絡中到底發(fā)生了什么,如果你希望更細節(jié)的調(diào)查的話,可以考慮適用功能更為強大的wireshark工具。
tcpdump的系列教程“在這里”。
[13 - top]
top命令可以顯示系統(tǒng)中的進程信息。默認情況下,top會按照CPU使用率從高到低來顯示系統(tǒng)中的進程,并且每5秒刷新一次排行榜。
當然,你也可以讓top按照PID、進程壽命、CPU耗時、內(nèi)存消耗等維度對進程進行排序。(我經(jīng)常使用的是P和M快捷鍵,分別是按CPU利用率排序、按內(nèi)存使用量排序)
通過top命令,你可以很快的發(fā)現(xiàn)那些失去控制或不符合預期的進程。
[14 - uptime]
通過uptime命令可以查看系統(tǒng)已經(jīng)運行了多久,可以統(tǒng)計當前處于登陸狀態(tài)的用戶數(shù)量,還可以顯示當前服務器的負載情況。
- # uptime
- 18:35:17 up 11 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00
[15 - vmstat]
大多數(shù)情況下,你可以使用vmstat命令去查看系統(tǒng)的虛擬內(nèi)存情況,因為Linux通常會通過虛擬內(nèi)存來獲得更好的存儲性能。
如果你的程序占用了大量了內(nèi)存,那么系統(tǒng)會進行內(nèi)存頁換出的動作,以便把程序從內(nèi)存中移動到系統(tǒng)SWAP空間中,也就是硬盤中。
如果系統(tǒng)的內(nèi)存頁的換入換出動作頻度超過一個臨界值,那么這種狀態(tài)被叫做“Thrashing”。當系統(tǒng)處于thrashing狀態(tài)時,性能會急劇下降。
vmstat命令便可以幫助人們及時發(fā)現(xiàn)此類問題,找出那個拖慢系統(tǒng)的元兇。
- # 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會更為專業(yè),也具有更高級的協(xié)議分析和統(tǒng)計能力。
Wireshark同時具有GUI界面和shell借口。
如果你是一位資深的網(wǎng)絡管理員,那么你一定使用過ethereal。而如果你正在使用wireshark/ethereal,那么我推薦你閱讀Chris Sander的一本非常好的書《Practical Packet Analysis》。
謝謝!