Linux 性能(IO\CPU\記憶體\網路\磁碟)監控命令及基本命令 結合伺服器後端日常開發工作 ...
(一)Linux監控的幾個常用命令(對於伺服器後端程式猿很重要,必須掌握):
命令 | 功能 | 命令 | 功能 |
iostat | 統計CPU及網路、設備和分區IO的數據 | vmstat | 展示給定時間伺服器的狀態值(包括CPU使用率、記憶體使用狀況、虛擬記憶體交換情況、IO讀寫情況),很常用 |
free | 顯示記憶體狀況,包括空閑以及被使用的物理記憶體、交換記憶體以及被kernel使用的緩衝區 | sar | System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一 |
ps | 顯示當前正在運行的所有進程的快照 | strace | 跟蹤進程執行時系統調和所接收的信號 |
top | 實時顯示系統中各個進程的資源(cpu和load)占用狀況,類似於windows任務管理器 | tcpdump |
dump the traffic on a network, 根據用戶定義對網路上的包進行截獲的包分析工具, 功能和查看pcap包的wireshark工具差不多 |
- iostat
統計CPU及網路、設備和分區IO的數據,具體命令行參數見下表:
選項 | 含義 |
-d | 顯示設備(磁碟)使用狀態 |
-k | 某些使用block為單位的列強制使用kilobytes/每秒 |
-x | 顯示更多統計信息 |
-c | 顯示CPU利用率 |
輸入"iostat -x”,結果如下圖:
avg-cpu統計信息每段含義見下表:
參數 | 含義 |
%user | 在用戶態運行程式,CPU利用的百分比 |
%nice | 在nice優先順序(即靜態優先順序,具體啥含義請百度) |
%system | 在內核態運行程式,CPU利用的百分比 |
%iowait | 特別重要 — show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request |
%steal |
虛擬CPU等待的百分比 — Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor |
%idle | CPU 空閑的比列,CPU沒有IO請求需要處理 — 和 %iowait含義相反 |
設備(device)輸出結果每段含義詳細說明見下表:
參數 | 含義 |
rrqm/s |
每秒這個設備相關的讀取請求有多少被merge了, 當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge |
wrqm/s | 每秒這個設備相關的寫入請求有多少被merge了 |
r/s | The number of read requests that were issued to the device per second |
w/s | The number of write requests that were issued to the device per second |
rsec/s | 每秒讀取的扇區數 |
wsec/s | 每秒寫入的扇區數 |
avgrq-sz | |
avgqu-sz | |
await | 每一個IO請求的處理的平均時間(單位是毫秒) |
svctm | |
%util |
在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO, 而0.2秒閑置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。 一般地,如果該參數是100%表示設備已經接近滿負荷運行了 (當然如果是多磁碟,即使%util是100%,因為磁碟的併發能力,所以磁碟使用未必就到了瓶頸)。 |
- ps
- grep
- top
實時顯示系統中各個進程的資源占用狀況,類似於windows任務管理器,預設3秒鐘刷新一次,太快了,看不過來,-d 可以指定,多少時間更新一次
具體命令行參數說明見下表:
選項 | 含義 |
-a | 按照記憶體使用率排序 |
-d | 設置多長時間(以秒為單位)刷新一次結果 |
-p <pid> | 查看指定進程ID的信息 |
-u <username> | 查看指定用戶名的信息 |
-i | 不顯示任何閑置 (idle) 或僵屍 (zombie) 的進程 |
-n iterations | 指定更新多少次信息後終止 |
-c | 顯示完整命令,如mysql會顯示 “/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql” |
-s | 安全模式 |
-S | 累積時間模式,開啟此模式,會列出該進程及它已經死掉的子進程所使用的CPU時間 |
例如,“top -d 30” —— 30秒刷新一次(預設按cpu占用率排序),結果如下圖:
輸出結果前5行(統計的整體信息)的每一段的含義如下表所示:
行 | 段1含義 | 段2含義 | 段3含義 | 段4含義 | 段5含義 | 段6含義 | 段7含義 | 段8含義 |
1 - top | 13:43:10 - 當前時間 | up 4:21 - 系統運行時間,格式為"時:分" | 1 user - 當前登錄用戶數 |
load average: 0.01, 0.04, 0.01 - 系統負載,即任務隊列的平均值 三個數值依次為"1分鐘5分鐘 15分鐘”到目前的平均值 |
||||
2 - Tasks | 1012 total - 進程總數 | 1 running - 正在運行的進程數 | 1095 sleeping - 睡眠的進程數 | 6 stopped - 停止的進程數 | 0 zombie - 僵屍進程數 | |||
3 - Cpu(s) | 0.8%us - 用戶空間占用CPU百分比 | 0.1%sy - 內核空間占用CPU百分比 | 0.0%ni - 用戶進程空間改變過優先順序的占CPU百分比 | 99.2%id - 空閑CPU百分比 | 0.0%wa - 等待輸入輸出的CPU百分比 | 0.0%hi - | 0.0%si - | 0.0%st - |
4 - Mem | 132173688k total - 物理記憶體總量 | 38002800k used - 已使用的物理記憶體總量 | 94170888k free - 空閑記憶體總量 | 208420k buffers - 用於內核緩存的記憶體總量 | ||||
5 -Swap | 4194600k total - 交換區總量 | 0k used - 已使用的交換區總量 | 4194300k free - 空閑交換區總量 | 2624596k cached - 緩衝的交換區總量 |
在top命令模式下,按“f”鍵,會顯示每個column的詳細信息,如下圖:
每一列的含義翻譯成中文如下表所示:
列名 | 含義 |
PID | 進程ID |
USER | 用戶名 |
PR | 進程優先順序 |
NI | nice value,不知道怎麼翻譯好 |
VIRT | 進程使用的虛擬記憶體總量(kb) |
RES | 進程使用的、未被換出的物理記憶體大小 |
SHR | 共用記憶體大小(kb) |
S | 進程狀態。D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程 |
%CPU | 上次更新到現在的CPU時間占用百分比 |
%MEM | 進程當前使用的可被共用的記憶體容量 |
TIME+ | task自啟動以來,累計占用cpu時間,精確到百分之一秒 |
COMMAND | 命令行或者程式名 |
- free
顯示空閑和使用的記憶體信息,命令參數選項如下表:
選項 | 含義 |
-b -k -m -g | 單位分別為bytes, KB, MB, G |
-h | 人類可讀(即自動以MB,G等為單位顯示) |
-t | 額外顯示總數 (RAM + swap) |
-o (old format) | 不會顯示 -/+ buffers/cache 這行信息 |
輸入“free -m”,以M為單位,便於精確計算講解,結果如下圖:
輸出結果具體每行每列的含義詳見下表:
行 | total | used | free | shared | buffers | cached |
Mem: | 記憶體總數 (total = used + free) | 已經使用的記憶體數量 | 空閑記憶體數量 | 共用記憶體數量,據說已經廢棄不用 | 緩衝記憶體數量 | 緩存記憶體數量 |
-/+ buffers/cache: |
(- buffers/cache) used —— 反映的是被程式實實在在吃掉的記憶體 使用的記憶體數 = 第一行即Mem行的 “used - buffers - cached” = 34562 - 87 - 1322 = 33151M |
(+ buffers/cache) free —— 反映的是可以挪用的記憶體總數 空閑記憶體數 = 第一行即Mem行的 “free + buffers + cached” = 94513 + 87 + 1322 = 95922M 差2M不知道哪裡來的 |
||||
swap: (交換區) | 交換區記憶體總數 | 交換區已使用記憶體數 | 交換區空閑記憶體數 |
- sar
System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一
- vmstat
- tcpdump
dump the traffic on a network, 根據用戶定義對網路上的包進行截獲的包分析工具。tcpdump可以將網路傳輸的數據包的“頭”完全截獲下來以供分析。它支持針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用信息。直接啟動tcpdump將監視第一個網路介面上所有流過的數據包,抓取100個包的命令“tcpdump -c 100”,結果如下圖:
具體命令行參數詳見下表:
選項 | 含義 |
-i <網卡號或稱之為網路介面> | 監聽指定網卡(又稱網路介面)的數據包,如tcpdump -i eth0(監聽第一個網路介面,etho也是預設監聽的網卡,第一個嘛) |
tcpdump -i etho dst host hostname | 監視所有發送到主名為hostname的網路數據包(dst — 目的地,通過預設網卡) |
tcpdump -i etho src host hostname | 截獲主機名為hostname所發送的所有數據(src — 源,通過預設網卡) |
tcpdump ip host 210.27.48.1 and !210.27.48.2 | 獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的網路包 (!—— 取反,即非的意思嘛) |
(二)基本簡單命令
列表彙總基本命令:
命令 | 功能 | 命令 | 功能 | 命令 | 功能 |
ls | 查看當前目錄下有哪些文件和文件夾 | whereis | 查找可執行的軟體命令在哪裡 | clear/reset/ CTRL + l | 清屏——切換到下一個新的屏幕 |
pwd | 顯示當前目錄的完整路徑 | cd | 改變所在目錄 | vi | 文本編輯器 |
cat | 輸出文件的內容到屏幕 | mkdir | 創建目錄 | vim | 程式編輯器 |
sh | 執行shell腳本 | rmdir | 刪除目錄 | kill | 殺死進程 |
yum | 軟體包管理器 | mv | 移動文件 | ifconfig | 顯示或者設置網路設備 |
sudo | 以系統管理員的身份執行指令,類似於windows CMD,右鍵選擇"以管理員身份運行“” | rm | 刪除文件 | cal | 日曆 |
df | 查看磁碟使用情況 | cp | 複製文件 | date | 日期 |
stat | 顯示文件或者文件系統的狀態 | touch | 更新文件的訪問時間和修改時間,如果不存在,則創建之 | bc | 計算器 |
linux命令的常識:
(1)大小寫敏感,如 "top"可以識別,"Top" 則comand not found
(2)-h (部分命令支持,如衝突則不支持)和 --help(大多數命令支持),查看命令幫助信息,如 rmdir --help,提示“ rmdir [OPTION]... DIRECTORY..”
(3)命令有縮寫和全拼兩種格式,如 rmdir 的"-p" <=> "--parents"
(4)CTRL + C ,exit 當前正在執行的命令;CTRL + Z , stop 當前正在執行的命令
(5)命令格式說明,“【】”括起來表示選項可選,接下來緊跟的詳細參數,如ls命令說明:“ls [OPTION]... [FILE]...”
(6)可通過“|”進行命令拼接,如“ps -ef | grep java | grep -v grep”
(7)linux 命令或者參數在輸入1個或2個字元後,按Tab鍵,會列出可選命令和參數,如果輸入3個或者4個字元,可查找出唯一的命令和參數,將自動補全
(8)鍵盤“PgUp”和“PgDn"及 鍵盤“↑”和“↓” 可以切換到上一個或者下一個已輸入的命令;按鍵“←” 和“→” ,可以在命令里左右移動游標;按鍵“Home” 和“End” 可以跳轉到命令的第一個字元和末尾
(8)linux里所有東西都被當做文件,不像windows有硬體設備的概念,如磁碟、CPU等,所以你裝的所有軟體,如mysql等都是文件
詳細論述:
- ls
查看當前目錄下有哪些文件及文件夾,具體命令行參數說明見下表:
常用選項 | 含義 |
-l | 一行顯示一個文件或者文件夾,並顯示諸如文件大小、文件最後修改時間、owner等信息 |
-a | 列出所有文件及文件夾,包括隱藏文件 |
-R | 把子文件夾下的文件也全部列出來,可以“ls -R -l”組合用 |
-S | 按文件大小倒敘列出所有文件 |
-h | 以人類可讀的形式列出文件大小(K,M,G) |
如在 linux的根目錄下,輸入“ls”,結果如下圖:
如果是在包含有文件的目錄下,輸入“ls”,比如在root下,則會包含文件如 “install.log” 及文件夾 “Music” 等等,結果如下圖:
組合命令,“ls -S -h -l”,結果如下圖:
- pwd
顯示當前的完整路徑名,如下圖:
- cd
切換當前目錄,具體語法: cd [dirName],具體命令行參數說明見下表:
選項 | 含義 |
.. | 切換到父級目錄 |
/ | 切換到根目錄 |
~ | 切換到home根目錄 |
- whereis
查找命令—具體語法: whereis [ -sbmu ] [ -SBM dir ... -f ] name...,例如"whereis mysql",結果如下圖:
- cat
輸出文件內容到終端,例如“cat install.log”,結果如下圖:
- sh
- ifconfig
顯示或者設置網路設備,輸入“ifconfig”, 結果如下圖(可以看到自己的ipv4 、ipv6 地址等信息):
- kill
- rm
- mv
- cp
- touch
更新文件的訪問時間和修改時間,如果文件不存在,則創建之。如我在root根目錄,“touch test2019.txt”,文件不存在則創建之,效果如下圖:
- mkdir
創建目錄,
- rmdir
- df
- vi 及vim
- yum
- sudo
- stat
顯示文件或者文件系統的狀態,具體語法: stat [OPTION]... FILE...,例如“stat a.txt”, 結果如下圖:
- bc
內置計算器,"bc -q" 不會輸出關於bc軟體的一些信息,直接用(回車輸出結果),如下圖:
- cal
日曆
- date
日期—具體語法: date [OPTION]... [+FORMAT],例如“date ‘+%Y % m%d %H %m’”,輸出當期日期的年月日、時、分,結果如下圖:
附註:
未完待續,空了接著完善
*****************************************************************************************************
精力有限,想法太多,專註做好一件事就行
- 我只是一個程式猿。5年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
- 寫博客的意義在於鍛煉邏輯條理性,加深對知識的系統性理解,鍛煉文筆,如果恰好又對別人有點幫助,那真是一件令人開心的事
*****************************************************************************************************