工程師追查線上問題(或運維)經常使用的shell命令

shell自己是很是強大的,而工程師在追查線上問題時,如何可以更加快速更加有效的定位問題,用好shell很是關鍵。下面是我總結的幾個在追查問題時經常使用的shell命令。你們能夠參考下。你們有好的命令,也能夠在這之上完善。html

一、日誌分析類:shell

(1)性能

cut -d ‘’ -f4 wap_log |sort |uniq -c

 

好比cpu idle急劇降低,要看一下當前的流量如何,是不是因爲流量突增引發。可使用該命令:日誌

其中wap_log是日誌名,4 是時間那一列,簡單介紹下這個shell命令。htm

這是一行實例日誌行:排序

218.203.63.190 - - [09/Feb/2012:12:15:03 +0800] "GET /view/102795.html HTTP/1.1" 200 4557 "-" "MAUI WAP Browser" "jid=XKYGPzLXwG!70061790;$path=/" 76進程

在這個shell命令中,cut先根據空格分隔符對日誌行進行分割,而後取第4個field,也就是時間,取到時間後,對時間進行排序,排序後,再去重,計數。這樣就能夠輸出每一個時間段的日誌瀏覽量。內存

下面是改shell的輸出實例:同步

18 [09/Feb/2012:12:54:51it

14 [09/Feb/2012:12:54:52

11 [09/Feb/2012:12:54:53

10 [09/Feb/2012:12:54:54

12 [09/Feb/2012:12:54:55

15 [09/Feb/2012:12:54:56

11 [09/Feb/2012:12:54:57

第一列是個數,第二列是時間,固然,也能夠針對於這個在後面再用awk任意發揮,好比找出瀏覽量大於x的時間段,等等。這樣就能夠清楚的看到,每一個時間點的請求數,從而斷定是不是請求數過大致使。

(2)

cat access_log |awk  'BEGIN{sum=0;count=0;}{sum+=$NF;count++;}END{printf("sum=%d,count=%d,avg=%f\n",sum,count, sum/count)}'

access_log爲日誌名,用awk切割後,$NF爲最後一個域,就是耗時域,因此這條命令的做用就是計算平均耗時。

下面是該shell的實例輸出:

sum=3121224,count=96000,avg=32.512750

二、性能分析類:

(1)

ps aux | sort –n –k 5 | tail

獲得耗內存最大的10個進程。

ps aux 就不用解釋了,後面sort,-n表明按照數字大小進行排序,-k表明排序的key  6 表明第6列,第6列就是佔用內存大小列。

下面是輸出:

**     11800  0.0  0.0 261652 49316 ?      S     2011   3:32 **.

**     11801  0.0  0.0 261652 49316 ?      S     2011   3:33 **.

**    11802  0.0  0.0 261652 49316 ?      S     2011   3:33 **.

**    11803  0.0  0.0 261652 49316 ?      S     2011   3:33 **.

**     11804  0.0  0.0 261652 49316 ?      S     2011   3:33 **.

**    11805  0.0  0.0 261652 49316 ?      S     2011   3:32 **.

**     25511  0.0  0.0 261652 49316 ?      S     2011   1:15 **.

**    25512  0.0  0.0 261652 49316 ?      S     2011   0:00 **.

**     28391  1.4  0.5 547488 369664 ?     Ssl  Jan16 501:58 **

(**爲用戶名和進程名,已隱藏。)

(2)

ps aux | sort –n –k 4 | tail

同理,這是獲得cpu消耗最大的10個進程

(3)

lsof

固然lsof不屬於性能分析類,可是該命令又常常會用到:

 

lsof filename

顯示開啓filename這個文件的進程名

 

lsof –i:8099

查看開啓8099端口的進程

(4)

netstat

查找端口的進程名除了用lsof外,也能夠用netstat,

直接netstat –nlp | grep port便可

 

不過通常只有root權限才能夠用lsof,普通用戶的話,可使用/usr/sbin/lsof 不過通常沒有太多有價值的信息。

三、其餘類:

(1)rsync命令

rsync命令通常用來和線上機同步代碼,那他和scp有什麼不一樣呢? 一個是rsync命令能夠方便的exclude,scp沒法方便的exclude.另外,有一個很重要的不一樣是,rsync能夠保持軟鏈,但scp不能保持軟鏈。就是說,scp在執行過程當中,不會識別軟鏈,而是直接當作普通文件夾來處理。另外,比較重要的是,rsync爲增量同步,scp爲全量

通常同步命令以下:

rsync -av –bwlimit=2000 –progress –exlude=」log」 源地址  目標地址

-av這個參數你們能夠到網上搜下,這裏就再也不詳解了,av這個參數,若是沒有特殊需求,就把這個參數帶上。

--bwlimit是限速,單位是kb

--progress表明是顯示同步進度

--exclude表明,不一樣步的文件夾,這個文件夾是基於源地址的,也就是說好比exclude寫的是log,源地址寫的是/home/xx/ 那麼,不一樣步的文件夾就是/home/xx/log。

 

好,對於shell命令,我就先寫這麼多,你們也能夠基於這些命令自由發揮,拼接出更有價值的命令。

相關文章
相關標籤/搜索