Linux服務(wù)器性能的日常命令和工具大全
概述
通過使用以下命令和工具,可以在1分鐘內(nèi)對系統(tǒng)資源使用情況有個大致的了解
其中一些命令需要安裝sysstat包,有一些由procps包提供。這些命令的輸出,有助于快速定位性能瓶頸,檢查出所有資源(CPU、內(nèi)存、磁盤IO等)的利用率(utilization)、飽和度(saturation)和錯誤(error)度量,也就是所謂的USE方法
下面我們來逐一介紹下這些命令和工具,有關(guān)這些命令和工具更多的參數(shù)和說明,請參照手冊
1.uptime
$uptime
23:51:26up21:31,1user,loadaverage:30.02,26.43,19.02
這個命令可以快速查看機器的負載情況。在Linux系統(tǒng)中,這些數(shù)據(jù)表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態(tài)為D)的數(shù)量。這些數(shù)據(jù)可以讓我們對系統(tǒng)資源使用有一個宏觀的了解。
命令的輸出分別表示1分鐘、5分鐘、15分鐘的平均負載情況。通過這三個數(shù)據(jù),可以了解服務(wù)器負載是在趨于緊張還是區(qū)域緩解。如果1分鐘平均負載很高,而15分鐘平均負載很低,說明服務(wù)器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪里。反之,如果15分鐘平均負載很高,1分鐘平均負載較低,則有可能是CPU資源緊張時刻已經(jīng)過去。
上面例子中的輸出,可以看見最近1分鐘的平均負載非常高,且遠高于最近15分鐘負載,因此我們需要繼續(xù)排查當前系統(tǒng)中有什么進程消耗了大量的資源?梢酝ㄟ^下文將會介紹的vmstat、mpstat等命令進一步排查。
2.dmesg | tail
$dmesg|tail
[1880957.563150]perlinvokedoom-killer:gfp_mask=0x280da,order=0,oom_score_adj=0
[...]
[1880957.563400]Outofmemory:Killprocess18694(perl)score246orsacrificechild
[1880957.563408]Killedprocess18694(perl)total-vm:1972392kB,anon-rss:1953348kB,file-rss:0kB
[2320864.954447]TCP:PossibleSYNfloodingonport7001.Droppingrequest.CheckSNMPcounters.
該命令會輸出系統(tǒng)日志的最后10行。示例中的輸出,可以看見一次內(nèi)核的
oom kill和一次TCP丟包。這些日志可以幫助排查性能問題。千萬不要忘了這一步。
3.vmstat— 虛擬內(nèi)存統(tǒng)計
vmstat命令是用于顯示虛擬內(nèi)存、內(nèi)核線程、磁盤、系統(tǒng)進程、I/O模塊、中斷、CPU活躍狀態(tài)等更多信息
在默認的情況下,Linux系統(tǒng)是沒有vmstat這個命令的,如果你要使用它
必須安裝一個包名叫sysstat的程序包。命令格式常用用法如下:
$vmstat1
procs---------memory-------------swap-------io-----system--------cpu-----
rbswpdfreebuffcachesisobiboincsussyidwast
3400200889792737085918280005610961300
320020088992073708591860000592132844282981100
320020089011273708591860000095012154991000
32002008895687371259185600048119002459990000