linux 系統運維小工具
1 vmstat ,系統自帶
procs 列 :
r 列: 表示運行和等待CPU時間片的進程數,這個值如果長期大於系統CPU核數,說明CPU不足,需要增加CPU,其中的CPU指的是邏輯CPU
查看CPU總核數 :
b 列表示在等待的資源的進程數目
memory列:
swpd:是內存切換到交換分區的量(單位為k),如果swpd值不為0,或者較大,只要si so 長期為0,不會影響系統性能
free 表示當前空間的物理內存數量(單位為k)
buff 表示buff chache 的內存數量,一般對塊設備的讀寫才要緩沖
cache 表示page cached 的內存數量,一般作為文件系統的cached,頻繁訪問的文件都會被放入cached中,當物理內存過小或不夠使用時,其會釋放
swap列:
si : 每秒由交換分區寫入內存的大小
so :每秒由內存寫入交換分區的大小
如果內存足夠使用,則交換分區的寫入和寫出都為0,只有當這兩個值長期大於0,則表示系統內存不夠。
IO 列:
BI :表示從塊設備讀入數據的總量(即讀磁盤)(塊/s)
BO:表示寫入塊設置的數據總量(即寫磁盤)(塊/s)
system 列: 顯示采集間隔內發生的中斷數
in 列表示在某一時間間隔內觀察到每秒設備中斷數
cs 列表示每秒產生的上下文切換次數
如果這兩個值比較大,表示內核消耗CPU比較厲害
CPU列: 顯示了CPU的使用狀態
us: 用戶進程消耗CPU的時間百分比,如果長期大於50%,則需要優化程序算法
sy: 顯示了系統(內核)進程消耗CPU的時間百分比,如果大於80%,則說明可能CPU資源不足
id : 顯示了CPU 處於空閑時間的百分比
wa :顯示了IO 等待所占用的CPU時間百分比,如果長期高於20%,則有問題
可選參數及擴展:
參數選項 | 解釋說明 |
---|---|
-a | 顯示活躍和非活躍期內存 |
-f | 顯示從系統啟動至今的fork 進程數量 |
-m | 顯示slab信息 |
-n | 只在開始時顯示一次個字段的名稱 |
-s | 顯示內存相關統計信息及多種系統活動數量(重點) |
-d | 顯示磁盤相關統計信息 |
-p | 顯示指定磁盤分區統計信息 |
-S | 使用指定單位顯示,有k,K,m,M,分別代表1000,1024,1000000,1048576字節,默認單位為k(重點) |
-t | 統計信息帶上時間戳 |
範例 1
3 表示3秒間隔
5 表示顯示5次
inact 表示非活躍的內存大小
active 表示活躍的內存大小
範例2 顯示內存詳細信息
範例3 查看磁盤讀/寫
2 iostat 需要安裝
iostat 是I/O statistics(輸入/輸出)的縮寫,其主要功能是對系統磁盤I/O操作進行監視,它的主要是顯示磁盤讀寫操作的統計信息,同時也會給出CPU的使用情況。
語法格式
iostat [選項] [ 時間間隔 [次數]]
參數選項 | 解釋說明 |
---|---|
-c | 顯示CPU的使用情況 |
-d | 顯示磁盤的使用情況 |
-k | 每秒以kB為單位顯示數據 |
-m | 每秒以MB 單位顯示數據 |
-n | 顯示NFS 的使用情況 |
-t | 顯示每次統計執行的時間 |
-p device | 指定要統計的磁盤設備名稱,默認為所有磁盤 |
-x | 顯示擴展統計 |
%user :用戶進程消耗CPU時間百分比
%nice:改變優先級的進程占用CPU時間百分比
%system: 系統內核進程消耗的CPU時間百分比
%iowait:IO等待所占中的CPU時間百分比
%steal:虛擬機強制CPU等待時間百分比
%idle: CPU空閑狀態的時間百分比
tps:表示該設備每秒傳輸次數,一次傳輸的意思是一次I/O請求,多個邏輯請求可能會被合並成一次I/O請求
Blk_read/s:表示每秒讀取的數據塊數
Blk_wrtn/s:表示每秒寫入的數據塊數
Blk_read: 表示讀取的所有塊數
Blk_wrtn: 表示寫入的所有塊數
只顯示磁盤信息
rrqm/s:每秒進行merge 的讀操作的數目
wrqm/s:每秒進行merge 的寫操作數據
r/s : 每秒完成的讀I/O 設備次數
w/s:每秒完成的寫I/O設備的次數
rKB/s:每秒讀入的千字節數
wKB/s: 每秒寫入的千字節數
avgrq-sz: 設備平均每次進行I/O操作的數據大小(扇區)
avgqu-sz:平均I/O隊列長度
await:設備平均每次I/O操作的等待時間
svctm: 設備平均每次I/O操作的等待時間
%util:每秒中用於I/O操作的百分比
3 uptime 命令
uptime (選項)
-V 顯示指令的版本信息
實例
內容說明:
15:07:32 系統的當前時間
up 14min ,表示系統已經運行的時間
1 user 表示用戶的鏈接數,是總鏈接數
load average 表示系統平均負載,統計最近1,5,15 分鐘平均負載
系統的平均負載是指在特定時間內運行隊列的平均進程數。
如果每個CPU內核的當前活動進程數不大於3.表示系統性能是良好的,如果大於5,則說明性能嚴重有問題
sar 收集系統信息
通過sar 命令,可以全面的獲取CPU,運行隊列,磁盤I/O、分頁(交換區)、內存、CPU中斷和網絡等性能數據
語法格式
sar [選項] [時間間隔 [次數]]
說明:
在sar 命令及後面的選項中,每個元素之間至少要有一個空格
參數說明
參數選項 | 解釋說明 |
---|---|
-A | 顯示系統所有資源設備的運行情況 |
-u | 顯示系統所有CPU在采樣時間內的負載狀態 |
-P | 顯示當前系統中指定CPU的使用情況 |
-d | 顯示所有硬盤設備在采樣時間內的使用情況 |
-r | 顯示在采樣時間內系統內存的使用情況 |
-b | 顯示在采樣時間內緩沖區的使用情況 |
-v | 顯示索引節點、文件和其他內核表的狀態 |
-n | 顯示網絡運行狀態 |
-q | 顯示運行隊列的大小,它與系統當前的平均負載相同 |
-R | 顯示進程在采樣時間內的活動情況 |
-w | 顯示系統交換活動在采樣時間內的狀態 |
安裝軟件包
查看CPU相關信息:
kbmemfree : 空閑物理內存量
kbmemused: 使用中的物理內存量
%memused: 物理內存的使用率
kbbuffers: 內存中作為緩沖區使用的物理內存容量
kubcached:內核中作為緩存使用的物理內存容量
%xommit:應用程序當前的內存大小占大小的使用百分比
顯示緩沖區的使用情況:
tps: 每秒物理設備的I/O傳輸總量
rtps:每秒從物理設備讀入的數據總量
wtps:每秒向物理設備寫入的數據總量
bread/s:每秒從物理設備讀入的數據量,單位為塊/s。
bwrtn/s:每秒向物理設備寫入的數據量,單位同上
顯示網絡的運行狀態
IFACE:網絡接口
rxpck/s:每秒中接受的數據包
txpck/s:每秒中發送的數據包
rxkB/s: 每秒鐘接受的字節數
txkB/s:秒鐘發送的字節數
rxcmp/s:每秒中接受的壓縮數據包
txcmp/s:秒鐘發送的壓縮數據包
rxmcst/s:每秒中接受的多播數據包
顯示網絡錯誤的統計數據
IFACE:網絡接口
rxerr/s: 每秒中接受的壞數據包
txerr/s:每秒鐘發生的壞數據包
coll/s:每秒的沖突數
rxdrop/s: 因為緩沖充滿,每秒鐘丟棄的已經接收的數據包數
txdrop/s:因為緩沖充滿。每秒中丟棄已經發送的數據包數
txcarr/s: 發送數據包時,每秒載波錯誤數
rxfram/s:每秒接受數據包的幀對其錯誤數
rxfifo/s: 接受的數據包每秒FIFO過速的錯誤數
txfifo/s: 發送的數據包每秒FIFO過速的錯誤數。
顯示套接字信息
totsck:使用套接字總數量
tcpsck: 使用TCP套接字數量
udpsck:使用UDP套接字數量
rawsck:使用raw 套接字數量
ip-frag:使用IP段數量
tcp-tw:處於TIME_WAIT狀態的TCP套接字數量
查看系統磁盤讀寫性能
DEV: 表示磁盤設備名稱
tps: 表示該設備每秒的傳輸次數
rd_sec/s: 表示每秒從設備讀取的扇區數
wr_sec/s:表示每秒寫入設備的扇區數目
avgrq-sz:設備平均每次I/O操作的數據大小(扇區)
avgqu-sz:平均I/O隊列長度
await:設備平均每次I/O操作的等待時間(毫秒)
svctm:設備平均每次I/O操作的服務時間(毫秒)
%util: 每秒用於I/O操作的百分比
二 網絡管理命令
1 tcpdump
tcpdump 命令是一個截獲網絡數據包的包分析工具,tcpdump可以將網絡中傳送的數據包的[頭]完全截獲下來分析,它支持針對網絡層,協議,主機,端口等的過濾,並支持與、或、非邏輯語句協助過濾有效信息
tcpdump命令工作是要先把網卡的工作模式切換到混雜模式,因為要修改網絡接口的工作模式,因此tcpdump命令需要以root的身份運行
tcpdump [選項] [表達式]
參數說明
參數選項 | 解釋說明 |
---|---|
-A | 以ASCII 碼方式顯示每一個數據包,在抓取數據包時,可方面查看數據 |
-c <數據包數目> | 接受指定的數據包數目後退出命令 |
-e | 每行的打印輸出中將包含數據包的數據鏈路層頭部信息 |
-i <網絡接口> | 指定要監聽數據包的網絡接口 |
-n | 不進行DNS解析,加快顯示速度 |
-nn | 不將協議和端口數字等轉換成名字 |
-q | 以快速的方式運行,此選項僅顯示數據包的協議概要信息,輸出信息較短 |
-s <數據包大小> | 設置數據包抓取長度,如果不設置則默認為68字節,設置為0則自動選擇合適的長度來抓取數據包 |
-t | 在每行輸出信息中不顯示時間戳標記 |
-tt | 顯示當前行與前一行的延遲 |
-tttt | 在每行打印的時間戳之前添加日期 |
-v | 顯示命令執行的詳細信息 |
-vv | 顯示比-v 選項更加詳細的信息 |
-vvvv | 顯示更加相信的輸出 |
1 安裝TCPDUMP
實例 :
-i 指定監聽的端口
-c 指定監聽數據包的數量
16:52:50 當前時間,精確到微秒
IP 192.168.3.21.54680 > server6.ssh:從具體數據包的信息和>表示流向
flags[.] :TCP 包中的標誌信息,S是SYN標誌的縮寫,F(fIN),P(PUSH),R(RST),[.] 沒有標記
seq: 數據包中的數據的順序號
ack:下次期望的順序號
win: 接受緩存的窗口大小
length:數據包長度
監聽固定的IP地址
監聽固定的端口號
監聽指定協議的數據包
常見協議:IP,arp、icmp、tcp、udp 等
2 nmap
網絡探測工具/端口掃描器
nmap 命令是一款開放源代碼的網絡探測和安全審核工具,是network mapper 的縮寫,器設計目標i是快速地掃描大型網絡,nmap 可以發現網絡上有那些主機,主機提供了什麽服務,並探測操作系統的類型及版本信息
軟件安裝
nmap [掃描類型] [通用選項] {掃描目標}
掃描目標可以為IP地址或子網地址等
參數說明
參數選項 | 解釋說明 |
---|---|
-sS | TCP 同步掃描TCP SYN) |
-sT | TCP鏈接掃描 |
-sn | 不進行端口掃描,只檢查主機正在運行,該選項與老板不的-sP相同 |
-sU | 掃描UDP端口 |
-sV | 探測服務器版本信息 |
-Pn | 只進行掃描,不ping主機 |
-PS | 使用SYN包對目標主機進行掃描,默認是80端口,也可以指定端口,格式為-PS22或-PS22-25,80,53等,PS和端口號之間沒有空格 |
-PU | 使用UDP ping 掃描端口 |
-O | 激活對TCP/IP指紋特征的掃描,獲得遠程主機的標誌,也就是操作系統類型 |
-v | 顯示掃描過程的詳細信息 |
-S <ip> | 設置掃描的源IP地址 |
-g port | 設置掃描的源端口 |
-oN | 把掃描的結果重定向到文件中 |
-iL filename | 從文件中讀取掃描的目標 |
-p<端口> | 指定要掃描的端口,可以是一個單獨的端口,也可以是用逗號分隔開的多個端口,或者使用"_"表示端口範圍 |
-n | 不進行DNS解析,加快掃描速度 |
--exclude | 排除指定主機 |
--excludefile | 排除指定文件中的主機 |
查看主機當前開放的端口
掃描主機的特定端口
掃描一個網段
3 ping
ping 命令可用於測試主機之間網絡的連同性,執行ping 命令會使用ICMP傳輸協議,發送要求回應的消息,若遠端網絡功能沒有問題,就會回應該信息,
ping [選項] [目標主機]
參數選項 | 解釋說明 |
---|---|
-c <次數> | 指定發送ICMP報文的次數,否則將一直發送 |
-i <時間間隔> | 相鄰兩次發送報文的時間間隔,默認時間間隔是1s |
-n | 不查詢主機名,直接顯示IP地址 |
-q | 只顯示命令開始時的信息和運行結束時的統計信息,忽略命令運行過程中出現的信息 |
-s<數據包大小> | 設置發送數據包的大小,默認大小為56字節,再加上8字節ICMP頭部,一共是64字節ICMP包 |
-t <生存期> | 設置發送的數據包其生存期(TLL)的值 |
-w 截止時間 | 超過截止時間,立即退出ping程序 |
-W 超時時間 | 等待相應的超時時間 |
-c 3:發送3次ICMP包
-i 3:每次發包的時間間隔為3s
-s 1024: 設置發送的數據包大小為1024字節
-t 220,設置發送數據包的ttl值為220
三 Linux 進程管理命令
1 top
top 命令用於實時地對系統處理器狀態進行監控,它能夠實時的顯示系統中各個進程的資源占用情況,該命令可以按照CPU的使用,內存的使用和執行時間對系統的任務進行排序顯示,同時top 命令還可以通過交互式命令進行設定顯示
top [選項]
後跟命令
參數選項 | 解釋說明 |
---|---|
-b | 以批處理的模式顯示進程信息,輸出結果可以傳輸給其他程序或寫入到文件中,這種模式下,top命令不會接受任何輸入,一站式運行到直到達到-n選項設置的閾值,或ctrl+C終止 |
-c | 顯示進程的整個命令路徑,而不是只顯示命令名稱 |
-d | 指定每兩次屏幕信息刷新之間的時間間隔 |
-H | 指定這個可以顯示每個線程的情況,否則就是進程的總情況 |
-i | 不顯示閑置或僵屍的進程信息 |
-n | top 輸出信息的更新次數 |
-p | 顯示指定的進程信息 |
交互式命令
交互式命令就是在top命令執行過程中使用的一些命令:
交互式命令 | 含義 |
---|---|
h 或 ? | 顯示幫助信息,給出交互式命令的一些說明總結 |
Z | 全局顏色設置 |
B | 全局字體加粗設置 |
l(小寫L) | 切換是否顯示平均負載和啟動時間信息 |
t | 切換是否顯示進程和CPU狀態信息 |
m | 切換是否顯示內存信息 |
1(數字1) | 用於多核CPU監控,可監控每個邏輯CPU的運行狀況 |
I | Irix/sokaris 模式 |
f | 從當前顯示列表中添加或刪除項目,按"f"鍵之後會顯示列的列表,按"a-z"鍵即可顯示或隱藏對應的列,最後按回車鍵確定 |
o | 該表top 輸出信息中顯示項目的順序,按大小寫的a-z 鍵可以將相應的列向右移動,而按大寫的A-Z鍵可以將相應的列向左移動,最後按回車鍵確定 |
F或O | 選擇排序的列 |
<,> | 移動選擇排序的列。‘<‘ 選擇左臨一列排序,‘>‘選擇右臨一列排序 |
R | 切換正常/反轉順序 |
H | 切換是否顯示線程信息 |
c | 切換是夠顯示完整命令行和命令名稱信息 |
i | 切換是夠顯示閑置進程和僵屍進程 |
S | 切換到累計模式 |
x | 以高亮的形式排序對應列,需要結合b/z 使用 |
y | 高亮運行的進程,需要結合b/z 使用 |
z | 打開/關閉顏色 |
b | 打開/關閉加粗 |
u | 顯示指定用戶相關的進程信息 |
n或# | 設置顯示進程的最大行數 |
k | 終止一個進程,系統將提示用戶輸入一個需要終止進程的PID |
r | 重新設置一個進程的優先級,系統提示用戶輸入需要該變的進程PID,以及需要設置的優先級值,輸入一個正值將使優先級降低,反之則可以使該進程擁有更高的優先級,默認值是10 |
d或s | 改變top輸出信息兩次刷新的時間,系統將提示輸入新的時間,單位為s,如果是小數,則換算成ms,如果是0,則系統不停刷新,默認刷新時間是3s,如果設置太小,則可能會造成系統負載過大 |
W | 將當前top 設置寫入"~/.toprc"文件中 |
q | 退出top顯示 |
顯示說明
第一行:任務隊列信息,同uptime命令執行結果
第二行:tasks為任務(進程),系統現有進程115個,處於運行狀態的1個,正在休眠的114個,stoped狀態0個,zombie(僵屍)的0個
第三行:CPU狀態信息
us 用戶占用CPU比例
sy 內核占用cpu比例
ni 改變過優先級的進程占用CPU的百分比
id 空閑CPU的百分比
wa I/O等待占用CPU的百分比
ni 硬中斷(hardware IRQ)占用CPU的百分比
si 軟中斷software interrupt)占用CPU的百分比
st 虛擬機占用CPU的百分比
第四行:內存狀態
total 物理內存總量
used 使用中的內存總量
free 空閑內存總量
buffers 緩沖的內存總量
第五行:swap 交換分區信息
total 交換分區總量
used 使用的交換分區量
free 空閑的交換分區量
cached 緩存的內存量
第六行: 空行
第七行:各進程的狀態監控
PID : 進程ID
USER: 進程所有者
PR:進程優先級
NI :nice 值,負值表示高優先級,正值表示低優先級
VIRT: 進程使用的虛擬內存總量。單位為kb
RES: 進程使用的、未被換出的物理內存發小,單位為kb
SHR:共享內存大小,單位為kb
S: 進程狀態,D= 不可中斷的睡眠狀態、 R= 運行、 S=睡眠 、T =跟蹤/停止 、 Z=僵屍進程
%CPU 上次更新到現在的CPU時間占用百分比
%MEM 進程使用的物理內存百分比
TIME+ 進程使用的CPU時間總計,單位為1/100秒
COMMAND 進程名稱(命令名/命令行)
2 ps
ps命令用於列出執行ps命令時刻的進程快照,要想動態信息,就需要使用top命令
ps [選項]
參數選項 | 解釋說明 |
---|---|
-a | 顯示所有終端下執行的進程 |
a | 顯示與終端相關的所有進程,包含每個進程的完整路徑 |
x | 顯示與終端無關的所有進程 |
u | 顯示進程的用戶信息 |
-u | 顯示指定用戶相關的進程信息 |
-e | 顯示所有進程 |
-f | 額外顯示UID,PID,C與STIME 的欄位 |
f | 顯示進程樹 |
-H | 顯示進程樹 |
-I | 以詳細的格式來顯示進程的狀態 |
-o | 自定義輸出指定的字段,以逗號分隔 |
--sort key | key表示為指定字段排序,默認為升序,+key為升序,-key 為降序 |
PID 是進程的標識號
TTY 是進程所屬的終端控制臺
TIME 列是進程所使用的總的CPU時間
CMD 列是正在執行的命令行
UID:進程擁有者
PID:進程標識號
PPID: 進程父進程標識號
C: CPU 使用資源百分比
STIME:進程開始時間
TTY: 該進程是在哪個終端機上面運行,若與終端機無關,則顯示[?],另外,tty1-tty6是本機面的登錄者進程,若為pts/0,則表示有網絡連接進主機的進程
TIME: 進程所使用的總的CPU時間
CMD:正在執行的命令行
常用組合命令
USER :該進程所屬的用戶
PID: 進程的進程號
%CPU:該進程使用掉的CPU百分比
%MEM:該進程所占用的物理內存的百分比
VSZ: 該進程使用掉的虛擬內存量(單位kbytes)
RSS: 該進程占用的固定的內存量(單位為kbytes)
TTY: 該進程是在哪個終端機上運行
STAT: 該進程目前狀態
R: 正在運行
S: 正在睡眠或者可以運行
D: 不可中斷睡眠
T: 正在偵測或者是停止了
Z :已經終止,但是其父進程無法正常終止他,從而編程僵屍進程
+: 前臺進程
I: 多線程進程
N:低優先級進程
‘<‘:高優先級進程
s: 進程領導者
L:已將頁面鎖定到內存中
START:該進程被觸發啟動的時間
TIME:該進程實際使用的CPU運作的時間
COMMAND: 該進程的實際命令
以詳細格式顯示進程狀態
參數詳解:
F:代表這個進程的標誌,4 代表使用者為super user。
S:代表這個進程的狀態為stat
C:代表CPU使用率百分比
PRI: 優先級
NI:nice值
ADDR:指出該進程在內存的那個部分,如果是個running,則一般是[-]
SZ: 使用掉的內存大小
WCHAN: 目前這個進程是否正在運行中,若是則為[-]
3 kill 和killall
終止進程
kill [選項] [進程號]
參數選項 | 解釋說明 |
---|---|
-l | 列出全部信號名稱 |
-p | 指定kill 命令只打印相關的進程號,而不發送任何信號 |
-s | 指定要發送的信號 |
可以使用-l(小寫L)進行參數信號和數字信號之間的轉換
常用信號說明
信號 | 說明 |
---|---|
HUP(1) | 掛起,通常因終端掉線或用戶退出而引發的 |
INT(2) | 中斷,通常是按下CTRl+c組合鍵來發出這個信號 |
QUIT(3) | 退出,通常是按下CRTL+\組合鍵發出此信息號 |
kill(9) | 立即結束進程的運行 |
TERM(15) | 終止,通常在系統關機時發送 |
TSTP(20) | 暫停進程運行,通常是按下CTRL+Z組合鍵發出這個信號 |
kill 默認使用的信號為15,用於結束進程,如果進程忽略此信號,可以使用信號9強制終止進程
在kill中有一個特殊信號值為0,其中-0 表示不發送任何信號,但仍然會對對應的進程進行檢查,如果$pid對應的進程已經存在,則返回0,否則返回1
killall 通過進程名終止進程
killall [選項] [進程名]
參數選項 | 解釋說明 |
---|---|
-e | 對於很長的名字,要求能夠準確匹配,默認,如果一個進程名的長度超過了15個字符,則無法使用整個名字了,這種情況下,killall會終止所有匹配名字前15個字符的所有進程,而-e參數的作用是模糊匹配,如果同時指定了-v選項,則killall會針對每個忽略的記錄打印一條消息 |
-I | 不區分大小寫匹配 |
-g | 終止屬於該進程組的進程 |
-i | 在終止進程之前詢問是否確認 |
-q | 如果沒有進程終止則不提示 |
-r | 使用正則表達式匹配要終止的進程名稱 |
-s | 用指定的信號代替默認信號 |
-u | 終止指定用戶的進程 |
-v | 報告信號是否發送成功 |
-w | 等待所有被終止的進程死去,killall 每秒會檢查一次被終止的進程是否仍然存在,其僅在都死光後才返回。 |
linux 系統運維小工具