原標題:10分鐘教會你看懂top

後端們最怕的事情之一就是服務器的負載突然飆升,這可能又意味着一個個奪目Call馬上要打過來了。碰到這種情況怎麼辦,大家第一反應一定是登陸到服務器上,先敲一個top命令看看Load Average吧。今天這篇文章和大家說說怎麼看這個“Load Average”。

>>>>

Load Average

很多人說Load Average這一個指標就能說明系統負載高了,這句話是對的。那麼具體是哪裏壓力大了呢?這三個數值是怎麼計算出來的呢?可能很多人一下子都說不上來。

先來說說定義吧: 在一段時間內,CPU正在處理以及等待CPU處理的進程數之和。三個數字分別代表了1分鐘,5分鐘,15分鐘的統計值。

所以,這個數值的確能反應服務器的負載情況。但是,這個數值高了也並不能直接代表這臺機器的性能有問題。可能是因爲正在進行CPU密集型的計算,也有可能是因爲I/O問題導致運行隊列堵了。所以,當我們看到這個數值飆升的時候,還得具體問題具體分析。直接升級機器是簡單粗暴,但是治標不治本。

top命令一行一行看

top命令輸出了很多參數,真正的服務器負載情況我們要綜合其他參數一起看。

第一行:

top-20 :41:08up18 days, 5 :24, 2 users, loadaverage: 0 .04, 0 .03, 0 .05

top:當前時間 up:機器運行了多少時間 users:當前有多少用戶 loadaverage:分別是過去1分鐘,5分鐘,15分鐘的負載

具體需要關注的果然還是load average這三個數值。大家都知道,一個CPU在一個時間片裏面只能運行一個進程,CPU核數的多少直接影響到這臺機器在同時間能運行的進程數。所以一般來說Load Average的數值別超過這臺機器的總核數,就基本沒啥問題。

第二行:

Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombie

Tasks:當前有多少進程running:正在運行的進程sleeping:正在休眠的進程stopped:停止的進程zombie:殭屍進程

running越多,服務器自然壓力越大。

第三行:

%Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

us: 用戶進程佔CPU的使用率sy: 系統進程佔CPU的使用率ni: 用戶進程空間改變過優先級id: 空閒CPU佔用率wa: 等待輸入輸出的CPU時間百分比hi: 硬件的中斷請求si: 軟件的中斷請求st: steal time

這一行代表了CPU的使用情況,us長期過高,表明用戶進程佔用了大量的CPU時間。us+sy如果長期超過80或者90,可能就代表了CPU性能不足,需要加CPU了。

第四行&第五行

KiB Mem : 65810456total, 30324416free, 9862224used, 25623816buff/cache KiB Swap: 7999484total, 7999484free, 0used. 54807988avail Mem

total:內存總量free:空閒內存 used:使用的buffer/cache:寫緩存/讀緩存

第四第五行分別是內存信息和swap信息。所有程序的運行都是在內存中進行的,所以內存的性能對與服務器來說非常重要。不過當內存的free變少的時候,其實我們並不需要太緊張。真正需要看的是Swap中的used信息。Swap分區是由硬盤提供的交換區,當物理內存不夠用的時候,操作系統纔會把暫時不用的數據放到Swap中。所以當這個數值變高的時候,說明內存是真的不夠用了。

第五行往下

PIDUSER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19868root 20 0 19.733g 369980 15180 S 0.7 0.6 129:53.91 java 19682root 20 0 19.859g 5.766g 22252 S 0.3 9.2 139:42.81 java 54625100 20 0 50868 33512 4104 S 0.3 0.1 0:04.68 fluentd

PID: 進程idUSER: 進程所有者PR: 優先級。數值越大優先級越高NI: nice值,負值表示高優先級,正值表示低優先級VIRT: 進程使用的虛擬內存總量SWAP: 進程使用的虛擬內存中被換出的大小RES: 進程使用的、未被換出的物理內存大小SHR: 共享內存大小SHR: 共享內存大小S:進程狀態。D表示不可中斷的睡眠狀態;R表示運行;S表示睡眠;T表示跟蹤/停止;Z表示殭屍進程。%CPU: 上次更新到現在的CPU佔用百分比 ;%MEM: 進程使用的物理內存百分比 ;TIME+: 進程使用的CPU時間總計,單位1/100秒;COMMAND: 命令名/命令行

這些就是進程信息了,從這裏可以看到哪些進程佔用系統資源的概況。

其他命令

top當然是我們最常見的查看系統狀況的命令。其他命令還有很多。vmstat,w,uptime ,iostat這些都是常用的命令。

綜上

看懂這些具體參數以後,就知道自己的代碼到底哪方面需要改進了,是優化內存消耗,還是優化你的代碼邏輯,當然無腦堆機器也可以,只要你說服的了老闆!

—THE END—

編輯 ∑Gemini

來源:掘金

這10個著名的思想實驗,竟然是物理學家完成的

從輸入 URL 到頁面加載完成的過程中都發生了什麼事情?

如何向5歲小孩解釋什麼是支持向量機(SVM)?

代數、幾何、分析 各自的範疇

7年賺的2個億,數學家6年就花光了,全砸在自家的房子上

把這種瓷磚鋪滿世界,圖案也不會重複

相關文章