負載(load)是linux機器的一個重要指標,直觀了反應了機器當前的狀態。如果機器負載過高,那么對機器的操作將難以進行。
Linux的負載高,主要是由於CPU使用、內存使用、IO消耗三部分構成。任意一項使用過多,都將導致服務器負載的急劇攀升。
查看服務器負載有多種命令,w或者uptime都可以直接展示負載,
$ uptime
12:20:30 up 44 days, 21:46, 2 users, load average: 8.99, 7.55, 5.40
$ w
12:22:02 up 44 days, 21:48, 2 users, load average: 3.96, 6.28, 5.16
load average分別對應於過去1分鍾,5分鍾,15分鍾的負載平均值。
這兩個命令只是單純的反映出負載,linux提供了更為強大,也更為實用的top命令來查看服務器負載。
top命令能夠清晰的展現出系統的狀態,而且它是實時的監控,按q退出。
Tasks行展示了目前的進程總數及所處狀態,要注意zombie,表示僵屍進程,不為0則表示有進程出現問題。
Cpu(s)行展示了當前CPU的狀態,us表示用戶進程占用CPU比例,sy表示內核進程占用CPU比例,id表示空閑CPU百分比,wa表示IO等待所占用的CPU時間的百分比。wa占用超過30%則表示IO壓力很大。
Mem行展示了當前內存的狀態,total是總的內存大小,userd是已使用的,free是剩余的,buffers是目錄緩存。
Swap行同Mem行,cached表示緩存,用戶已打開的文件。如果Swap的used很高,則表示系統內存不足。
在top命令下,按1,則可以展示出服務器有多少CPU,及每個CPU的使用情況
一般而言,服務器的合理負載是CPU核數*2。也就是說對於8核的CPU,負載在16以內表明機器運行很穩定流暢。如果負載超過16了,就說明服務器的運行有一定的壓力了。
在top命令下,按shift + "c",則將進程按照CPU使用率從大到小排序,按shift+"p",則將進程按照內存使用率從大到小排序,很容易能夠定位出哪些服務占用了較高的CPU和內存。
僅僅有top命令是不夠的,因為它僅能展示CPU和內存的使用情況,對於負載升高的另一重要原因——IO沒有清晰明確的展示。linux提供了iostat命令,可以了解io的開銷。
輸入iostat -x 1 10命令,表示開始監控輸入輸出狀態,-x表示顯示所有參數信息,1表示每隔1秒監控一次,10表示共監控10次。
其中rsec/s表示讀入,wsec/s表示每秒寫入,這兩個參數某一個特別高的時候就表示磁盤IO有很大壓力,util表示IO使用率,如果接近100%,說明IO滿負荷運轉。
總結:
(1)使用top命令查看負載,在top下按“1”查看CPU核心數量,shift+"c"按cpu使用率大小排序,shif+"p"按內存使用率高低排序;
(2)使用iostat -x 命令來監控io的輸入輸出是否過大