top在linux中是一個非常直觀的命令,可以清晰地看到各進程對資源的使用情況。
但是如果你想從top命令展示中提取某些數據出來,如果想當然地使用這句命令:
top|grep xxx
就會被卡住,欲哭無淚。
我們不妨查一下top這個命令,看看是否有其他辦法來把數據抓出來。
首先簡單了解一下top這個命令。
top是linux的一個性能分析工具,類似於windows的任務管理器。其最大特點有兩個:動態、直觀地顯示進程占用資源情況。
執行top的時候,會在前台默認打開一個terminal,可使用q來退出。
例如:
上面的圖中,有很多有用的信息:
1. 可以看到uptime、1min 5min 15min的負載
2. 可以看到總任務數、在跑任務數、停止任務數、僵屍任務數
3. 可以看到user數
4. 可以看到總的cpu負載情況
5. 可以看到總的內存和swap使用情況,以kb為單位
6. 各個進程使用系統資源的情況
上面的各列分別指:
PID: 進程號
USER: 啟動進程的用戶
PR: 優先級
NI: 謙讓級
VIRT: 虛擬內存占用
RES: 進程使用的、未被換出的物理內存大小
SHR: 共享內存大小,單位kb
S: 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程)
%CPU: 上次更新到現在的CPU時間占用百分比
%Mem: 物理內存占用百分比
TIME+: 進程啟動時間
COMMAND: 命令名
而這個命令也有一些參數,具體可以看下邊:
-b: 批處理
-c: 顯示完整的命令
-l:忽略失效進程
-s: 保密模式
-n 數字: 顯示次數,后加
-u 用戶名: 顯示某用戶下的進程情況
-p 進程號: 指定進程
top還有一些交互命令,在前置頁面使用,十分方便:
h: 顯示幫助菜單
k: 殺死一個進程
i: 忽略僵屍進程
P: 按照CPU占用進行排序
M: 按照內存占用進行排序
T: 根據時間/累計時間進行排序
W: 將結果保存到~/.toprc文件
好了,介紹了一圈之后,到了本文的重點了。如果我要抓出mysql進程,查看其性能情況並取數,可使用以下兩種方法:
top -u mysql -n 1|grep mysqld|awk '{print $9}' #取CPU占用數據
top -u mysql -n 1|grep mysqld|awk '{print $10}' #取內存占用數據
或者:
top -b -n 1|grep mysql|awk '{print $9}' #取CPU占用數據
top -b -n 1|grep mysql|awk '{print $10}' #取內存占用數據
而抓取數據只是前置步驟,后續可以使用此數據進行各種后續操作。