後端們最怕的事情之一就是服務器的負載忽然飆升,這可能又意味着一個個奪目Call立刻要打過來了。碰到這種狀況怎麼辦,你們第一反應必定是登錄到服務器上,先敲一個top命令看看Load Average吧。今天這篇文章和你們說說怎麼看這個「Load Average」。java
不少人說Load Average這一個指標就能說明系統負載高了,這句話是對的。那麼具體是哪裏壓力大了呢?這三個數值是怎麼計算出來的呢?可能不少人一會兒都說不上來。ios
先來講說定義吧:在一段時間內,CPU正在處理以及等待CPU處理的進程數之和。三個數字分別表明了1分鐘,5分鐘,15分鐘的統計值。後端
因此,這個數值的確能反應服務器的負載狀況。可是,這個數值高了也並不能直接表明這臺機器的性能有問題。多是由於正在進行CPU密集型的計算,也有多是由於I/O問題致使運行隊列堵了。因此,當咱們看到這個數值飆升的時候,還得具體問題具體分析。直接升級機器是簡單粗暴,可是治標不治本。緩存
top命令輸出了不少參數,真正的服務器負載狀況咱們要綜合其餘參數一塊兒看。bash
第一行:
top - 20:41:08 up 18 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05
top:當前時間
up:機器運行了多少時間
users:當前有多少用戶
load average:分別是過去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 : 65810456 total, 30324416 free, 9862224 used, 25623816 buff/cache
KiB Swap: 7999484 total, 7999484 free, 0 used. 54807988 avail Mem
total:內存總量
free:空閒內存
used:使用的
buffer/cache: 寫緩存/讀緩存
複製代碼
第四第五行分別是內存信息和swap信息。全部程序的運行都是在內存中進行的,因此內存的性能對與服務器來講很是重要。不過當內存的free變少的時候,其實咱們並不須要太緊張。真正須要看的是Swap中的used信息。Swap分區是由硬盤提供的交換區,當物理內存不夠用的時候,操做系統纔會把暫時不用的數據放到Swap中。因此當這個數值變高的時候,說明內存是真的不夠用了。spa
第五行往下
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19868 root 20 0 19.733g 369980 15180 S 0.7 0.6 129:53.91 java
19682 root 20 0 19.859g 5.766g 22252 S 0.3 9.2 139:42.81 java
54625 100 20 0 50868 33512 4104 S 0.3 0.1 0:04.68 fluentd
PID:進程id
USER:進程全部者
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這些都是經常使用的命令。
看懂這些具體參數之後,就知道本身的代碼到底哪方面須要改進了,是優化內存消耗,仍是優化你的代碼邏輯,固然無腦堆機器也能夠,只要你說服的了老闆!