10分鐘教會你看懂top
Load Average

很多人說Load Average這一個指標(biāo)就能說明系統(tǒng)負(fù)載高了,這句話是對的。那么具體是哪里壓力大了呢?這三個數(shù)值是怎么計算出來的呢?可能很多人一下子都說不上來。
先來說說定義吧:在一段時間內(nèi),CPU正在處理以及等待CPU處理的進(jìn)程數(shù)之和。三個數(shù)字分別代表了1分鐘,5分鐘,15分鐘的統(tǒng)計值。
所以,這個數(shù)值的確能反應(yīng)服務(wù)器的負(fù)載情況。但是,這個數(shù)值高了也并不能直接代表這臺機(jī)器的性能有問題。可能是因?yàn)檎谶M(jìn)行CPU密集型的計算,也有可能是因?yàn)镮/O問題導(dǎo)致運(yùn)行隊列堵了。所以,當(dāng)我們看到這個數(shù)值飆升的時候,還得具體問題具體分析。直接升級機(jī)器是簡單粗暴,但是治標(biāo)不治本。
top命令一行一行看
top命令輸出了很多參數(shù),真正的服務(wù)器負(fù)載情況我們要綜合其他參數(shù)一起看。
第一行:top - 20:41:08 up 18 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05top:當(dāng)前時間up:機(jī)器運(yùn)行了多少時間users:當(dāng)前有多少用戶load average:分別是過去1分鐘,5分鐘,15分鐘的負(fù)載
具體需要關(guān)注的果然還是load average這三個數(shù)值。大家都知道,一個CPU在一個時間片里面只能運(yùn)行一個進(jìn)程,CPU核數(shù)的多少直接影響到這臺機(jī)器在同時間能運(yùn)行的進(jìn)程數(shù)。所以一般來說Load Average的數(shù)值別超過這臺機(jī)器的總核數(shù),就基本沒啥問題。
第二行:Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombieTasks:當(dāng)前有多少進(jìn)程running:正在運(yùn)行的進(jìn)程sleeping:正在休眠的進(jìn)程stopped:停止的進(jìn)程zombie:僵尸進(jìn)程
第三行:%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 stus: 用戶進(jìn)程占CPU的使用率sy: 系統(tǒng)進(jìn)程占CPU的使用率ni: 用戶進(jìn)程空間改變過優(yōu)先級id: 空閑CPU占用率wa: 等待輸入輸出的CPU時間百分比hi: 硬件的中斷請求si: 軟件的中斷請求st: steal time
這一行代表了CPU的使用情況,us長期過高,表明用戶進(jìn)程占用了大量的CPU時間。us+sy如果長期超過80或者90,可能就代表了CPU性能不足,需要加CPU了。
第四行&第五行KiB Mem : 65810456 total, 30324416 free, 9862224 used, 25623816 buff/cacheKiB Swap: 7999484 total, 7999484 free, 0 used. 54807988 avail Memtotal:內(nèi)存總量free:空閑內(nèi)存used:使用的buffer/cache:寫緩存/讀緩存
第五行往下PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND19868 root 20 0 19.733g 369980 15180 S 0.7 0.6 129:53.91 java19682 root 20 0 19.859g 5.766g 22252 S 0.3 9.2 139:42.81 java54625 100 20 0 50868 33512 4104 S 0.3 0.1 0:04.68 fluentdPID:進(jìn)程idUSER:進(jìn)程所有者PR:優(yōu)先級。數(shù)值越大優(yōu)先級越高NI:nice值,負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級VIRT:進(jìn)程使用的虛擬內(nèi)存總量SWAP:進(jìn)程使用的虛擬內(nèi)存中被換出的大小RES:進(jìn)程使用的、未被換出的物理內(nèi)存大小SHR:共享內(nèi)存大小SHR:共享內(nèi)存大小S:進(jìn)程狀態(tài)。D表示不可中斷的睡眠狀態(tài);R表示運(yùn)行;S表示睡眠;T表示跟蹤/停止;Z表示僵尸進(jìn)程。%CPU:上次更新到現(xiàn)在的CPU占用百分比 ;%MEM:進(jìn)程使用的物理內(nèi)存百分比 ;TIME+:進(jìn)程使用的CPU時間總計,單位1/100秒;COMMAND:命令名/命令行
這些就是進(jìn)程信息了,從這里可以看到哪些進(jìn)程占用系統(tǒng)資源的概況。
其他命令
top當(dāng)然是我們最常見的查看系統(tǒng)狀況的命令。其他命令還有很多。vmstat,w,uptime ,iostat這些都是常用的命令。
綜上
看懂這些具體參數(shù)以后,就知道自己的代碼到底哪方面需要改進(jìn)了,是優(yōu)化內(nèi)存消耗,還是優(yōu)化你的代碼邏輯,當(dāng)然無腦堆機(jī)器也可以,只要你說服的了老板!

來自:掘金
作者:Z.L41753
鏈接:https://juejin.cn/post/6844903919588491278
關(guān)注「開源Linux」加星標(biāo),提升IT技能

