現(xiàn)在有很多用于Linux的性能工具不恭,但它們是如何融合在一起的,我們什么時候使用它們德挣?在Velocity 2015上不撑,我給出了一個關(guān)于Linux性能工具的90分鐘教程臼勉。之前我已經(jīng)談過這個話題邻吭,但是考慮到90分鐘的時間段,我可以包含更多的方法宴霸,工具和現(xiàn)場演示囱晴,使其成為我所做主題的最完整的演示。視頻和幻燈片如下瓢谢。
第1部分(youtube)(54分鐘)畸写。
第2部分(youtube)(45分鐘)。
幻燈片(slideshare)氓扛。
在本教程中枯芬,我總結(jié)了傳統(tǒng)和高級性能工具,包括:top采郎,ps千所,vmstat,iostat蒜埋,mpstat淫痰,free,strace整份,tcpdump待错,netstat,nicstat烈评,pidstat火俄,swapon,lsof讲冠,sar烛占,ss,iptraf,iotop忆家,slaptop,pcstat 德迹,tiptop芽卿,rdmsr,lmbench胳搞,fio卸例,pchar,perf_events肌毅,ftrace筷转,SystemTap,ktap悬而,sysdig和eBPF;并參考更多呜舒。我還包括可觀察性,sar笨奠,基準(zhǔn)測試和調(diào)整(包括上面的圖像)的更新工具圖袭蝗。
本教程可以與廣泛的讀者共享 - 任何從事Linux系統(tǒng)工作的人 - 都可以作為免費(fèi)的Linux性能工具速成課程。我希望人們喜歡它并覺得它有用般婆。這是播放列表到腥。
在Netflix,我們有用于全云監(jiān)控的Atlas蔚袍,以及用于按需實例分析的Vector乡范。很多時候我們不需要直接登錄實例,但是當(dāng)我們這樣做時啤咽,本教程將介紹我們使用的工具晋辆。
您登錄到有性能問題的Linux服務(wù)器:您在第一分鐘檢查什么?
在Netflix闰蚕,我們擁有龐大的EC2 Linux云栈拖,以及眾多性能分析工具來監(jiān)控和調(diào)查其性能。 其中包括用于全云監(jiān)控的Atlas和用于按需實例分析的Vector没陡。 盡管這些工具可以幫助我們解決大多數(shù)問題涩哟,但我們有時需要登錄到實例并運(yùn)行一些標(biāo)準(zhǔn)的Linux性能工具。
前60秒:總結(jié)
在本文中盼玄,Netflix性能工程團(tuán)隊將使用標(biāo)準(zhǔn)的Linux工具向您展示在命令行中進(jìn)行優(yōu)化性能調(diào)查的前60秒贴彼。 在60秒內(nèi),您可以通過運(yùn)行以下十個命令埃儿,獲得系統(tǒng)資源使用情況和正在運(yùn)行的進(jìn)程的高級概念器仗。 查找錯誤和飽和度指標(biāo)(saturation metrics),因為它們都易于解釋,然后是資源利用率精钮。 飽和度(Saturation)是資源負(fù)載超過其處理能力的地方威鹿,并且可以作為請求隊列的長度或等待的時間暴露出來。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
其中一些命令需要安裝sysstat軟件包轨香。 這些命令公開的指標(biāo)將幫助您完成一些USE方法:用于查找性能瓶頸的方法忽你。 這涉及檢查所有資源(CPU,內(nèi)存臂容,磁盤科雳,e.t.c)的利用率(utilization),飽和度(saturation)和錯誤度量(error metrics)標(biāo)準(zhǔn)脓杉。 同時要注意檢查并排除資源的時候糟秘,因為通過消除(elimination)這個過程縮小了研究對象的范圍,并且指導(dǎo)任何后續(xù)調(diào)查(follow on investigation)球散。
以下部分總結(jié)了這些命令尿赚,并以生產(chǎn)系統(tǒng)為例。 有關(guān)這些工具的更多信息沛婴,請參閱他們的手冊頁吼畏。
1. uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
這是查看負(fù)載平均值的快速方法,它表示想要運(yùn)行的任務(wù)(進(jìn)程)的數(shù)量嘁灯。在Linux系統(tǒng)上泻蚊,這些數(shù)字包括想要在CPU上運(yùn)行的進(jìn)程以及在不可中斷的I / O(通常是磁盤I / O)中被阻塞的進(jìn)程。這提供了資源負(fù)載(或需求)的高級概念丑婿,但是沒有其他工具就無法正確理解性雄。值得快速瀏覽一下。
這三個數(shù)字是指數(shù)衰減移動總和平均值(exponentially damped moving sum averages)在1分鐘羹奉,5分鐘和15分鐘的常數(shù)秒旋。這三個數(shù)字讓我們了解負(fù)載如何隨時間而變化。例如诀拭,如果您被要求檢查問題服務(wù)器迁筛,并且1分鐘的值比15分鐘的值低得多,那么您可能已經(jīng)登錄太晚而錯過了該問題耕挨。
在上面的例子中细卧,負(fù)載平均值顯示最近的增加,1分鐘的值為30筒占,而15分鐘的值為19贪庙。數(shù)字這么大意味著很多東西:可能是CPU需求; vmstat或mpstat將會確認(rèn),這是本序列命令3和命令4翰苫。
2. dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
這可以查看最后10個系統(tǒng)消息止邮,如果有的話这橙。 尋找可能導(dǎo)致性能問題的錯誤。 上面的例子包含了殺手锏导披,TCP丟棄了一個請求屈扎。
不要錯過這一步! dmesg總是值得檢查撩匕。
3. vmstat 1
$ 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
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C
虛擬內(nèi)存統(tǒng)計數(shù)據(jù)的簡稱助隧,vmstat(8)是一種常用的工具(幾十年前首次為BSD創(chuàng)建)。它在每行上打印關(guān)鍵服務(wù)器統(tǒng)計信息的摘要滑沧。
vmstat運(yùn)行的參數(shù)為1,打印一秒摘要巍实。第一行輸出(在此版本的vmstat中)有一些列顯示引導(dǎo)后的平均值滓技,而不是前一秒。現(xiàn)在棚潦,跳過第一行令漂,除非你想學(xué)習(xí)和記住哪一列是哪一列。
要檢查的列:
r
:在CPU上運(yùn)行并等待輪換的進(jìn)程數(shù)量丸边。這比確定CPU飽和度的負(fù)載平均值提供了更好的信號叠必,因為它不包含I / O∶媒眩可以這么理解:大于CPU計數(shù)的“r”值就意味著飽和(saturation)纬朝。
free
:以千字節(jié)為單位的可用內(nèi)存。如果要計數(shù)的位數(shù)太多骄呼,則有足夠的空閑內(nèi)存共苛。包含在命令7中的“free -m”命令更好地解釋了可用內(nèi)存的狀態(tài)。
si
蜓萄,so
:交換和換出隅茎。如果這些不是零,則表示內(nèi)存不足嫉沽。
us
辟犀,sy
,id
绸硕,wa
堂竟,st
:這些是所有CPU平均CPU時間的細(xì)分。它們是用戶時間(user time)臣咖,系統(tǒng)時間( system time)(內(nèi)核)跃捣,空閑(idle),等待I / O(wait I/O)和被盜時間(stolen time)(由其他客人夺蛇,或者對于Xen而言疚漆,客戶自己的隔離驅(qū)動程序域(isolated driver domain))。
CPU時間細(xì)分將通過將用戶+系統(tǒng)時間加和來確認(rèn)CPU是否繁忙。等待I / O的持續(xù)程度指向磁盤瓶頸;這是CPU空閑的地方娶聘,因為任務(wù)被阻塞等待掛起的磁盤I / O闻镶。您可以將等待I / O視為另一種形式的CPU閑置,這樣可以為他們?yōu)槭裁撮e置提供線索丸升。
系統(tǒng)時間對于I / O處理是必需的铆农。高系統(tǒng)時間的平均值超過20%可能會讓人感興趣進(jìn)一步探索:內(nèi)核可能無效處理I / O。
在上面的例子中狡耻,CPU時間幾乎全部在用戶級別墩剖,而是指向應(yīng)用程序級別的使用。 CPU的平均使用率也超過90%夷狰。這不一定是個問題;使用“r”列檢查飽和度岭皂。