JB的測試之旅-Linux服務器很卡怎麼辦

前言

去年中旬,服務器就扔了個爬蟲一直怕數據,直到最近纔有空上服務器看看,結果,服務器超級卡,卡到什麼程度?輸一個ls等3秒,而後再等5s才能顯示結果;node

image.png-44.2kB

這確定不能忍,那有啥辦法能夠排查下?ios

free

free 命令顯示系統使用和空閒的內存狀況,包括物理內存、交互區內存(swap)和內核緩衝區內存,共享內存將被忽略;centos

若是free約少,說明內存被吃完了,就須要釋放內存了;緩存

參數

free 參數
如:free -m
複製代碼

命令參數

參數 意義
-b 以Byte爲單位顯示內存使用狀況;
-k 以KB爲單位顯示內存使用狀況;
-m 以MB爲單位顯示內存使用狀況;
-g 以GB爲單位顯示內存使用狀況;
-o 不顯示緩衝區調節列;
-s<間隔秒數> 持續觀察內存使用情況;
-t 顯示內存總和列;
-V 顯示版本信息;

參數詳解

image.png-23kB

參數 含義
total 總計物理內存的大小;
used 已使用多大;
free 可用有多少;
Shared 多個進程共享的內存總額;
Buffers/cached 磁盤緩存的大小;

內存清理

sync && echo 1 > /proc/sys/vm/drop_caches
複製代碼

image.png-66.9kB

/proc/sys/vm/drop_caches中的默認值爲0,服務器

  • 值爲1時表示能夠釋放pagecache緩存;
  • 值爲2時能夠釋放pagecache和inode緩存;
  • 值爲3時能夠釋放pagecache, dentries和inodes緩存;

top

top命令顯示當前系統正在執行的進程的相關信息,包括進程ID、內存佔用率、CPU佔用率等;工具

命令參數

參數 意義
-b 批處理;
-c 顯示完整的治命令;
-I 忽略失效過程;
-s 保密模式;
-S 累積模式;
-i<時間> 設置間隔時間;
-u<用戶名> 指定用戶名;
-p<進程號> 指定進程;
-n<次數> 循環顯示的次數;

參數詳解

直接輸入top便可顯示進程信息; 優化

image.png-258.3kB

第一行,任務隊列信息,當前時間、運行時間、負載狀況; 第二行,任務進程,共有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

顯示指定磁盤文件的可用空間;

通常來講,都是這麼使用:df -h,-h是以方便閱讀方式顯示;

image.png-60.7kB

當發現磁盤使用率很高時,那就要釋放磁盤空間了,刪除一些沒必要要的文件;

iostat

查看CPU、網卡、tty設備、磁盤、CD-ROM 等等設備的活動狀況, 負載信息;

命令參數

參數 含義
-C 顯示CPU使用狀況;
-d 顯示磁盤使用狀況;
-k 以 KB 爲單位顯示;
-m 以 M 爲單位顯示;
-N 顯示磁盤陣列(LVM) 信息;
-n 顯示NFS 使用狀況;
-p[磁盤] 顯示磁盤和分區的狀況;
-t 顯示終端和CPU的信息;
-x 顯示詳細信息;
-V 顯示版本信息;

參數詳解

iostat -x 1
顯示詳細信息,而且每秒刷新顯示
複製代碼

image.png-329.4kB

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

iotop是一個用來監視磁盤I/O使用情況的top類工具,跟top命令類似;

安裝

#Ubuntu
apt-get install iotop

#centos
yum install iotop
複製代碼

直接使用就能看到效果:

image.png-110.2kB

小結

是經常使用的一些命令,算是對基本功作一些補充,完;

相關文章
相關標籤/搜索