爲了解決性能問題,你登入了一臺Linux服務器,在最開始的一分鐘內須要查看什麼?css
在Netflix咱們有一個龐大的EC2 Linux集羣,還有很是多的性能分析工具來監控和調查它的性能。其中包括用於雲監控的Atlas,用於實例按需分析的Vector。即便這些工具幫助咱們解決了大多數問題,咱們有時仍是得登入Linux實例,運行一些標準的Linux性能工具來解決問題。html
在這篇文章裏,Netflix Performance Engineering團隊將使用居家常備的Linux標準命令行工具,演示在性能調查最開始的60秒裏要乾的事,java
運行下面10個命令,你能夠在60秒內就對系統資源的使用狀況和進程的運行情況有大致上的瞭解。無非是先查看錯誤信息和飽和指標,再看下資源的使用量。這裏「飽和」的意思是,某項資源供不該求,已經形成了請求隊列的堆積,或者延長了等待時間。linux
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
包。(譯註:指mpstat, pidstat, iostat和sar,用包管理器直接安裝sysstat便可) 這些命令所提供的指標可以幫助你實踐USE方法:這是一種用於定位性能瓶頸的方法論。你能夠以此檢查全部資源(CPU,內存,硬盤,等等)的使用量,是否飽和,以及是否存在錯誤。同時請留意上一次檢查正常的時刻,這將幫助你減小待分析的對象,並指明調查的方向。(譯註:USE方法,就是檢查每一項資源的使用量(utilization)、飽和(saturation)、錯誤(error))ios
接下來的章節裏咱們將結合實際例子講解這些命令。若是你想了解更多的相關信息,請查看它們的man page。git
$ uptime 23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
這個命令顯示了要運行的任務(進程)數,經過它可以快速瞭解系統的平均負載。在Linux上,這些數值既包括正在或準備運行在CPU上的進程,也包括阻塞在uninterruptible I/O(一般是磁盤I/O)上的進程。它展現了資源負載(或需求)的大體狀況,不過進一步的解讀還有待其它工具的協助。對它的具體數值不用太較真。github
最右的三個數值分別是1分鐘、5分鐘、15分鐘系統負載的移動平均值。它們共同展示了負載隨時間變更的狀況。舉個例子,假設你被要求去檢查一個出了問題的服務器,而它最近1分鐘的負載遠遠低於15分鐘的負載,那麼你極可能已經撲了個空。sql
在上面的例子中,負載均值最近呈上升態勢,其中1分鐘值高達30,而15分鐘值僅有19。這種現象有許多種解釋,頗有多是對CPU的爭用;該系列的第3個和第4個命令——vmstat
和mpstat
——能夠幫助咱們進一步肯定問題所在。docker
$ 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個系統信息,若是有的話。注意會致使性能問題的錯誤信息。上面的例子裏就包括對過多佔用內存的某進程的死刑判決,還有丟棄TCP請求的公告。apache
不要漏了這一步!檢查dmesg
老是值得的。
$ 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