去年中旬,服務器就扔了個爬蟲一直怕數據,直到最近纔有空上服務器看看,結果,服務器超級卡,卡到什麼程度?輸一個ls
等3秒,而後再等5s才能顯示結果;node
這確定不能忍,那有啥辦法能夠排查下?ios
free
命令顯示系統使用和空閒的內存狀況,包括物理內存、交互區內存(swap)和內核緩衝區內存,共享內存將被忽略;centos
若是free約少,說明內存被吃完了,就須要釋放內存了;緩存
free 參數
如:free -m
複製代碼
參數 | 意義 |
---|---|
-b | 以Byte爲單位顯示內存使用狀況; |
-k | 以KB爲單位顯示內存使用狀況; |
-m | 以MB爲單位顯示內存使用狀況; |
-g | 以GB爲單位顯示內存使用狀況; |
-o | 不顯示緩衝區調節列; |
-s<間隔秒數> | 持續觀察內存使用情況; |
-t | 顯示內存總和列; |
-V | 顯示版本信息; |
參數 | 含義 |
---|---|
total | 總計物理內存的大小; |
used | 已使用多大; |
free | 可用有多少; |
Shared | 多個進程共享的內存總額; |
Buffers/cached | 磁盤緩存的大小; |
sync && echo 1 > /proc/sys/vm/drop_caches
複製代碼
/proc/sys/vm/drop_caches
中的默認值爲0,服務器
top
命令顯示當前系統正在執行的進程的相關信息,包括進程ID、內存佔用率、CPU佔用率等;工具
參數 | 意義 |
---|---|
-b | 批處理; |
-c | 顯示完整的治命令; |
-I | 忽略失效過程; |
-s | 保密模式; |
-S | 累積模式; |
-i<時間> | 設置間隔時間; |
-u<用戶名> | 指定用戶名; |
-p<進程號> | 指定進程; |
-n<次數> | 循環顯示的次數; |
直接輸入top
便可顯示進程信息; 優化
第一行,任務隊列信息,當前時間、運行時間、負載狀況; 第二行,任務進程,共有74個進程,運行的有2個,72個休眠; 第三行,CPU狀態信息:spa
參數 | 含義 |
---|---|
us | 用戶空間佔用CPU的百分比; |
sy | 內核空間佔用CPU的百分比; |
ni | 改變過優先級的進程佔用CPU的百分比; |
id | 空閒CPU百分比; |
wa | IO等待佔用CPU的百分比; |
hi | 硬中斷(Hardware IRQ)佔用CPU的百分比; |
si | 軟中斷(Software Interrupts)佔用CPU的百分比; |
第四行,內存狀態:命令行
參數 | 含義 |
---|---|
total | 物理內存總量; |
used | 使用中的內存總量; |
free | 空閒內存總量; |
buffers | 緩存的內存量; |
第五行,swap交換分區信息:3d
參數 | 含義 |
---|---|
total | 交換區總量; |
used | 使用的交換區總量; |
free | 空閒交換區總量; |
cached | 緩衝的交換區總量; |
第六行,各進程的狀態監控:
參數 | 含義 |
---|---|
PID | 進程id; |
USER | 進程全部者; |
PR | 進程優先級; |
NI | nice值。負值表示高優先級,正值表示低優先級; |
VIRT | 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES; |
RES | 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA; |
SHR | 共享內存大小,單位kb; |
S | 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/中止 Z=殭屍進程; |
%CP | 上次更新到如今的CPU時間佔用百分比; |
%MEM | 進程使用的物理內存百分比; |
TIME+ | 進程使用的CPU時間總計,單位1/100秒; |
COMMAND | 進程名稱(命令名/命令行); |
通常來講,想殺掉某個進程,直接kill pid
便可;
作完這兩步,服務器至少沒那麼卡了;
顯示指定磁盤文件的可用空間;
通常來講,都是這麼使用:df -h
,-h是以方便閱讀方式顯示;
當發現磁盤使用率很高時,那就要釋放磁盤空間了,刪除一些沒必要要的文件;
查看CPU、網卡、tty設備、磁盤、CD-ROM 等等設備的活動狀況, 負載信息;
參數 | 含義 |
---|---|
-C | 顯示CPU使用狀況; |
-d | 顯示磁盤使用狀況; |
-k | 以 KB 爲單位顯示; |
-m | 以 M 爲單位顯示; |
-N | 顯示磁盤陣列(LVM) 信息; |
-n | 顯示NFS 使用狀況; |
-p[磁盤] | 顯示磁盤和分區的狀況; |
-t | 顯示終端和CPU的信息; |
-x | 顯示詳細信息; |
-V | 顯示版本信息; |
iostat -x 1
顯示詳細信息,而且每秒刷新顯示
複製代碼
cpu屬性值說明:
參數 | 含義 |
---|---|
%user | CPU處在用戶模式下的時間百分比; |
%nice | CPU處在帶NICE值的用戶模式下的時間百分比; |
%system | CPU處在系統模式下的時間百分比; |
%iowait | CPU等待輸入輸出完成時間的百分比; |
%steal | 管理程序維護另外一個虛擬處理器時,虛擬CPU的無心識等待時間百分比; |
%idle | CPU空閒時間百分比; |
disk屬性值說明:
參數 | 含義 |
---|---|
rrqm/s | 每秒進行 merge 的讀操做數目; |
wrqm/s | 每秒進行 merge 的寫操做數目; |
r/s | 每秒完成的讀 I/O 設備次數; |
w/s | 每秒完成的寫 I/O 設備次數; |
rsec/s | 每秒讀扇區; |
wsec/s | 每秒寫扇區數; |
rkB/s | 每秒讀K字節數; |
wkB/s | 每秒寫K字節數; |
avgrq-sz | 平均每次設備I/O操做的數據大小 (扇區); |
avgqu-sz | 平均I/O隊列長度; |
await | 平均每次設備I/O操做的等待時間 (毫秒); |
svctm | 平均每次設備I/O操做的服務時間 (毫秒); |
%util | 一秒中有百分之多少的時間用於 I/O 操做,即被io消耗的cpu百分比; |
備註:
若是 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。若是 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;若是 await 遠大於 svctm,說明I/O 隊列太長,io響應太慢,則須要進行必要優化。若是avgqu-sz比較大,也表示有當量io在等待;
複製代碼
iotop是一個用來監視磁盤I/O使用情況的top類工具,跟top
命令類似;
#Ubuntu
apt-get install iotop
#centos
yum install iotop
複製代碼
直接使用就能看到效果:
是經常使用的一些命令,算是對基本功作一些補充,完;