DevOps的三板斧 Strace

2021-06-15 09:59:51 字數 2463 閱讀 9965

話說這些天電視上正在熱映《隋唐英雄》,雖然我並沒有看,但是對當年田連元老先生的評書聯播《隋唐演義》卻是記憶猶新,特別是故事裡面講到的程咬金的三板斧:拍蒜瓣、戳腳指甲蓋、胡椒麵,每每聽來總是讓人忍俊不禁,不過這些貌似無厘頭的招數在實戰中卻往往有出奇制勝的效果,由此可以見簡單實用永遠都是硬道理,在當前這個倡導devops的年代,我們這些程式設計師自然也要學一些運維方面的本事才好安身立命,下面結合一些真實案例說說我在日常工作中常用的三板斧。

web伺服器負載飆公升,猜測是訪問量激增造成的,如何驗證?如果有監控,這自然不是什麼難事,但如果沒有呢?亦或者監控不能顯示即使資料,此時如何是好?

前提:日誌已經通過logrotate按天切分,其內容類似下面的樣子:

123.123.123.123 - - [01/jan/2013:00:01:01 +0800] "get /path http/1.1" 200 123 "-" "mozilla"
利用awk,我們可以很方便的計算一天中每分鐘的訪問量是多少:

shell> awk -f: ' end ' /path/to/log | sort > count.log
下面列出生成的count.log檔案中的部分資料,結果一目了然,不多說了:

18:55 14450

18:56 14926

18:57 15645

18:58 16678

18:59 19032

19:00 29134

19:01 34665

19:02 35558

19:03 35545

19:04 35829

19:05 35608

如果想要以秒為單位來統計,很是類似的方法,這裡就不多說了。

程式執行很慢,我們如何知道到底慢在哪?此時可以利用strace的「r」選項,不過需要注意的是,strace的結果在標準錯誤裡,使用前最好重定向到標準輸出。

下面讓我們過濾某個php程序中操作時間大於0.001秒的操作:

shell> strace -rp 2>&1 | awk '$1 > 0.001'

0.001596 lstat64("/var/www", ) = 0

如果問題比較簡單,通常這樣就夠了,但如果問題相對複雜,那麼我們僅僅過濾出耗時的操作是不夠的,最好附上完整的上下文,此時如果用awk來做的話,**會變得很複雜,別忘了我們還有grep,通過它的「a」和「b」選項可以很方便的儲存上下文,此外利用它的正則功能,可以模擬判斷時間的大小。

下面讓我們過濾某個php程序中操作時間大於0.001秒的操作,並附上前後兩行上下文:

shell> strace -rp 2>&1 | grep -e '^[ ]*([1-9]|0\.[1-9]|0\.0[1-9]|0\.00[1-9])' -a 2 -b 2

0.000081 getcwd("/var/www/script", 4096) = 32

0.000805 lstat64("/var", ) = 0

0.001596 lstat64("/var/www", ) = 0

0.000105 lstat64("/var/www/script", ) = 0

0.000112 lstat64("/var/www/script/test.php", ) = 0

補充:本例中使用的是php程式,之所以會出現一堆lstat64操作是因為php配置中沒有設定合適的realpath_cache_size,具體就不多說了,大家自行查閱相關資料。

數字總是蒼白的,不如圖形來得直觀,gnuplot在繪圖方面非常簡單,就拿文章開頭統計訪問量的例子來說,以count.log為資料來源,**大致如下:

#!/usr/bin/gnuplot

set terminal png size 500,400

set grid

set xdata time

set timefmt "%h:%m"

set format x '%h'

set xlabel "time"

set ylabel "count"

set output "count.png"

plot "count.log" using 1:2 with line notitle

還支援利用多份兒資料畫多條線,這樣更方便對比歷史資料:

plot "count1.log" using 1:2 with line title "1st", \

"count2.log" using 1:2 with line title "2nd"

最終生成的圖形是不是比數字直觀多了:

gnuplot繪圖

有了gnuplot,我們甚至可以通過cron之類的方式打造簡易的圖形化監控系統。

…devops代表著未開軟體開發的方向,它倡導小團隊,強調單兵作戰能力,此時的程式設計師作為團隊中的一員,已經不能再僅僅侷限於開發的角色,必須在運維方面武裝自己,希望大家都能有自己的三板斧,當然我們可不是古惑仔,而是程咬金。

銷售三板斧

1 扎好馬步 把產品知識背的滾瓜爛熟,隨時考核 長期 制定懲罰措施,基本本沒紮好,不能去見客戶。2提煉話術摸著石頭過河,對客戶可能問到的各種可能提煉出行之有效的話術,熟讀於心,隨時考核 長期 模擬測試。3 多見客戶,不斷調頻,鍛鍊在實際壓力環境下的發揮能力 產品專注 兒多母苦,要鎖定高利潤 值的產品...

成功CRM的三板斧

沒有人不知道crm專案規劃的重要性,但如何成功地完成crm專案規劃就仁者見仁 智者見智了.經過了一段時間的考驗和沉澱之後,crm專案實施的總體效果如何,如何更成功地完成企業的crm專案,需要深層次地總結。不同的行業 不同的企業規模和企業性質對crm顯然有不同的需求,因此在企業確定需要crm的同時,一...

20180904 夏農shannon三板斧

夏農定理 保證質量的前提下,給出了能夠在乙個通道上傳輸的速度的上限。沒有給出如何達到這個上限。模擬 從a點開車到b點,在盡可能保證能夠到達b點的前提下,求開車速度v最快能多快?假設 路寬為w,路上的汽車數量為s 有效訊號 路上的紅綠燈數量為n 隨機雜訊 則 vmax w log2 1 s n 舉例 ...