看不懂top?10分鐘教你迅速看明白!

推薦閱讀

1. 字節跳動的面試難嗎?我該如何應對?

2. 挑戰10個最難回答的Java面試題,你能答對幾個?

3. 秋招Java崗:最全的BAT大廠面試題整理!

4. 2020年跳槽阿里天貓,難度係數超高的Java六面!

5. 面試官:談談你對 Spring AOP 的瞭解?請加上這些,絕對加分!

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

01 Load Average

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

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

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

02 top命令一行一行看

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

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

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

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

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

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

03 其他命令

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

04 總結 

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

最後:一波讀者小福利~

讀到這的朋友還可以免費領取一份收集的Java面試資料和Java核心知識體系文檔及更多Java進階知識筆記和視頻資料

歡迎做Java的工程師朋友們加入合作Q羣:【 java架構技術交流,578486082 】

羣內提供免費的Java架構學習資料(有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis、Netty、Redis、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多個知識點的架構資料)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章