系統監控工具ios
come from:https://blog.csdn.net/free050463/article/details/82842273
top、free、vmstat、iostat、pmap、glances、dstat、iotop、lsof
1 命令top
動態監控系統狀態 ,在命令行輸入top,界面以下
格式:
top [選項]
選項:
-p:指定進程
-b:所有顯示全部進程
-H : 線程模式,示例:top -H -p 5155
-n#:刷新多少次後退出
-d#:指定刷新時間間隔,默認爲3秒
執行界面
1. |top - 21:01:47 up 10:45, 4 users, load average: 0.04, 0.03, 0.05|
|命令uptime信息|
2. |Tasks: 259 total, | 1 running, |258 sleeping, | 0 stopped, | 0 zombie
| 總進程數 | 活動進程 | 睡眠進程 | 中止進程 | 殭屍進程|
3. |%Cpu(s): | 0.1 us, | 0.2 sy, | 0.0 ni, | 99.8 id,| 0.0 wa, | 0.0 hi, | 0.0 si, | 0.0 st|
| cpu狀態 |用戶佔用比例|內核佔用|改變過ni優先級的進程佔用| 空閒佔比 |等待IO時間| 硬中斷 |軟終端|丟失的時間片|
4. |KiB Mem : 1514076 total, | 76768 free, | 791284 used, | 646024 buff/cache|
| 總內存 | 剩餘量 | 使用量 |用於緩存的量|
5. |KiB Swap: 3145724 total, | 3145724 free, | 0 used. | 503752 avail Mem |
| 虛擬內存總量 | 空閒量 | 使用量 |緩衝的交換區總量|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
742 root 20 0 320060 6536 5072 S 0.3 0.4 0:49.45 vmtoolsd
1
2
3
4
5
6
7
8
9
10
11
12
首部信息顯示隱藏開關
uptime信息:開關 l
tasks信息與cpu: 開關 t
memory信息:開關 m
cpu分別顯示:(數字)1,顯示全部核心信息
st:丟失的時間片,系統識別虛擬機,但不會識別虛擬機中運行的,cpu會分配給虛擬機中一些進程用,就會產生未知時間片
排序:
p:以佔據的cpu百分比%cpu
M:佔據內存百分比,%MEM
T:累計佔據CPU時長,TIME+
管理指令:
q:退出命令
S:修改刷新時間間隔
k:終止指定進程
W: 保存至root/.toprc
####7.5.1 htop命令:EPEL源
與top命令類似,UI設計前衛一些
格式
htop [選項]
選項:
-d#:指定延遲時間
-u UserName:僅顯示指定用戶的進程
-s COLUME:以指定字段進行排序
子命令
s:跟蹤選定進程系統調用
l:顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t:顯示進程樹
2 內存空間管理
2.1 命令free
內存空間使用狀態
格式:free[OPTION]
選項
-b:以字節爲單位
-m:以MB爲單位
-g:以GB爲單位
-h:易讀模式
-t:顯示RAM+swap的總和
-s n:刷新間隔爲n秒
-c n:刷新n次後即退出
執行結果
buffers,解決速度不匹配問題;cache緩存,提升訪問速度的
[v9@hai7 ~]$free
total used free shared buffers cached
1:Mem: 1003020 887824 115196 4104 89252 428612
2:-/+ buffers/cache: 369960 633060
3:Swap: 2097148 1076 2096072
1
2
3
4
5
內存使用狀況
-/+ buffers/cach
(-buffers/cache) used內存數: used – buffers – cached
(+buffers/cache) free內存數 :free + buffers + cached
虛擬內存信息
2.2 vmstat命令
虛擬內存信息
格式
vmstat [options][delay[count]]
選項:
-s:顯示內存的統計數據
示例:
vmstat 1 動態觀察,1秒刷新一次
vmstat 1 10 執行10次退出,1秒執行一次
執行結果說明
vmstat -n
|procs| |-----------memory--------| |-swap-| -|---io---|-|system ||-------cpu-----|
1 2 3 4 5 6
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 107296 94720 442468 0 0 5 1 17 16 0 0 100 0 0
1
2
3
4
5
procs:
r:可運行(正運行或等待運行)進程的個數,和核心數有關
b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
memory:
swpd:交換內存的使用總量
free: 空閒物理內存總量
buffer:用於buffer的內存總量
cache:用於cache的內存容量
swap
si:從磁盤交換進內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)
io:
bi:從塊設備讀入數據到系統的速率(kb/s)
bo:保存數據至塊設備的速率
system:
in:interrupts終端速率,包括時鐘
cs:context switch 進程切換速率
cpu:
us:運行非內核代碼的時間
sy:運行內核代碼的時間
id:空閒時間.Linux2.5.41前,包括IO-wait time
wa:I/O等待時間. 2.5.41前,包括in idle
st:丟失時間.
2.3命令iostat
與vmstat使用方法類似,統計CPU和設備IO信息
格式
iostat [選項] [-p [device…] [interval [count] ]
選項
-c:僅顯示CPU統計信息.與-d選項互斥.
-d:僅顯示磁盤統計信息.與-c選項互斥.
-k:以K爲單位顯示每秒的磁盤請求數,默認單位塊.
-p:device | ALL 與-x選項互斥,用於顯示塊設備及系統分區的統計信息.
-t:在輸出數據時,打印蒐集數據的時間.
-V:打印版本號和幫助信息.
-x :輸出擴展信息.
示例
示例1. 監控設備adv1的擴展數據,每秒刷新一次,執行10次
[v9@hai7 ~]$iostat -x -d sda1 1 10
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda1 0.00 0.00 0.01 0.00 0.09 0.00 8.42 0.00 0.07 0.07 0.14 0.07 0.00
1
2
3
rrqm/s:每秒這個設備相關的讀取請求有多少被合併了
rsec/s:每秒讀取的扇區數
avgrq-sz:平均請求扇區的大小
avgqu-sz:是平均請求隊列的長度,越短越好
await: I/O響應時間,通常低於5ms,await與svctm差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
svctm: 表示平均每次設備I/O操做的服務時間
%util: 在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度
示例2. 以k爲單位顯示磁盤使用狀況,每2秒刷新一次
[v9@hai7 ~]$iostat -d -k 2
1
示例3. 默認執行結果示例
[v9@hai7 ~]$iostat
1:Linux 2.6.32-754.el6.x86_64 (hai6) 09/06/2018 _x86_64_ (4 CPU)
2:avg-cpu: %user %nice %system %iowait %steal %idle
0.02 0.00 0.16 0.00 0.00 99.81
3:Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
scd0 0.01 0.03 0.00 1540 0
sda 0.46 19.71 2.57 1047842 136528
1
2
3
4
5
6
7
8
9
架構CPU信息
CPU信息
塊設備信息
1. tps: 每秒鐘發送到的I/O請求數.
2. Blk_read /s: 每秒讀取的block數.
3. Blk_wrtn/s: 每秒寫入的block數.
4. Blk_read: 讀入的block總數.
5. Blk_wrtn: 寫入的block總數.
2.4 命令pmap
進程對應的內存映射,與文件/proc/PID(進程編號)/maps相似
格式
pmap [options] pid […]
選項
-x:顯示詳細格式的信息
執行示例,查看進程7795的內存佔用信息
[v9@hai7 ~]$pmap -x 7795
7795: nano
Address Kbytes RSS Dirty Mode Mapping
0000000000400000 168 112 0 r-x-- nano
0000000000629000 8 8 4 rw--- nano
0000000001fd9000 528 468 468 rw--- [ anon ]
... <==省略
[v9@hai7 ~]$cat /proc/7795/maps <==與pmap顯示內容類似
1
2
3
4
5
6
7
8
9
RSS:真正佔用空間
Dirty:髒數據,數據沒有最終結束,處於中間狀態
3. 命令glances
EPEL源,能夠跨網絡監控
格式
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file][-o output]
經常使用選項:
選項 含義
-b 以Byte爲單位顯示網卡數據速率
-d 關閉磁盤I/O模塊
-f /path/to/somefile 設定輸入文件位置
-o{HTML CSV}
-m 輸入格式
-n 禁用mount模塊
-t 延遲時間間隔
-1 每一個CPU的相關數據單獨顯示
內建命令
選項 含義
a 按進程自動排序
l 顯示或隱藏日誌
c 按 CPU% 排序
b Bytes or bits for network I/O
m 按 MEM% 排序
w 刪除警告日誌
p 按用戶排序
x 刪除警告和關鍵日誌
i 按I/O使用情況排序
1 流顯示每一個CPU內核的使用狀況
d 顯示隱藏磁盤讀寫情況
h 幫助信息
f 顯示系統信息
t View network I/O as combination
n 顯示網絡狀態
u View cumulative network I/O
s 顯示傳感器信息
q 離開程序
y hddtemp統計信息
C/S模式下運行glances命令,跨網絡訪問
服務器模式( S ):
格式
glances -s -B IPADDR
選項:
-s :表示以服務器端
-B:開啓某一個監聽地址,不加是全部網卡都參與
IPADDR:指明監聽的本機那個地址
客戶端模式( C ):
格式
glances -c IPADDR
選項
-c:以客戶端
IPADDR:要連入的服務器端地址,服務器指定的地址
4 命令dstat
系統資源統計,代替vmstat,iostat
格式
dstat [-afv] [options…] [delay[count]]
選項
選項 含義
-c 顯示cpu相關信息
-C 此參數可按需分別顯示cpu狀態,例:-C 0,1 是顯示cpu0和cpu1的信息
-d 顯示disk相關信息
-D total,sda,sdb…
-g 顯示page相關統計數據
-m 顯示memory相關統計數據
-n 顯示network相關統計數據
-p 顯示process相關統計數據
-r 顯示io請求相關統計數據
-s 顯示swapped相關統計數據
-y 系統狀態
- -socket 用來顯示tcp udp端口狀態
- -ipc 顯示ipc消息隊列,信號等信息
- -top-cpu 顯示最佔用CPU的進程
- -top-io 顯示最佔用io的進程
- -top-mem 顯示最佔用內存的進程
- -top-latency 顯示延遲最大的進程
- -output 將狀態信息以##.csv後綴定向到指定目錄下
示例
默認輸入 dstat 等於輸入了dstat -cdngy 1或dstat -a 1
dstat
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0| 0 0 | 424B 346B| 0 0 | 121 104
0 0 100 0 0 0| 0 0 | 240B 346B| 0 0 | 102 92
1
2
3
4
5
system:int、csw分別爲系統的中斷次數(interrupt)和上下文切換(context switch)
5. 命令iotop
是一個用來監視磁盤I/O使用情況的top類工具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息,可查看每一個進程是如何使用IO
[root@hai7 ~]$iotop
1:Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
2:Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
3: PID PRIO< USER DISK READ DISK WRITE SWAPIN IO COMMAND
1936 ?dif root 0.00 B/s 0.00 B/s 0.00 % 0.00 % tracker-extract
1943 ?dif root 0.00 B/s 0.00 B/s 0.00 % 0.00 % tracker-miner-fs
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
1
2
3
4
5
6
7
界面如上所示
Read和Write速率總計
實際的Read和Write速率
參數以下
PID:線程ID
PRIO:優先級
USER:用戶
DISK:磁盤讀速率
SWAPIN:swap交換百分比
IO:IO等待所佔的百分比
COMMAND:線程/進程命令
iotop經常使用參數
選項 含義
-o,–only 只顯示正在成I/O的進程或線程,除了傳參,能夠在運行過程總按o生效
-b,–batch 非交互模式,通常用來記錄日誌
-n NUM,–iter=NUM 設置監測的次數,默認無限。在非交互模式下頗有用
-d SEC,–delay=SEC 設置每次檢測的間隔,默認1秒,接受非整型數據例如1.1
-p PID,–pid=PID 指定檢測的進程/線程
-u USER,–user=USER 指定監測某個用戶產生的I/O
-P --processes 僅顯示進程,默認iotop顯示全部線程
-a,–accumulated 顯示累計的I/O,而不是帶寬
-k,–kilobytes 使用KB單位,而不是對人友好的單位,在非交互模式下,腳本編程有用
-t,–time 加上時間戳,非交互非模式
-q,–quiet 禁止頭幾行,非交互模式,有三種指定方式
-q 只在第一次監測時顯示列名
-qq 永遠不顯示列名
-qqq 永遠不顯示I/O彙總
交互按鍵
按鍵 用途
left和right方向鍵 改變排序
r 反向排序
o 切換至選項–only
p 切換至–processes選項
a 切換至–accumulatd選項
q 退出
i 改變線程的優先級
6. 命令lsof
list open files查看當前系統文件的工具,在Linux環境下,一切皆文件,用戶經過文件不只能夠訪問常規數據,還能夠訪問網絡鏈接和硬件如傳輸控制協議(TCP)和用戶數據協議(UDP)套接字等,系統在後臺都爲該應用程序分配了一個文件描述符
格式
lsof [選項]
選項
選項 含義
-a 列出打開文件存在的進程
-c 顯示command列中包含指定字符的進程所打開的文件
-g 列出GID號進程詳情
-d FD 列出佔用該文件號的進程
+d /DIR/ 列出目錄下被打開的文件
+D /DIR/ 遞歸列出目錄下被打開的文件
-n目錄 列出使用NFS的文件
-i條件 列出符合條件的進程(四、六、協議、:端口、@ip)
-p進程號 列出指定進程號所打開的文件
-u 列出UID號進程詳情
-h 列出UID號進程詳情
-v 顯示版本信息
-n 不反向解析網絡名字
示例
查看由登陸用戶啓動而非系統啓動的進程
[root@hai7 ~]$tty
/dev/pts/0
[root@hai7 ~]$lsof /dev/pts/0
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2189 root 0u CHR 136,0 0t0 3 /dev/pts/0
bash 2189 root 1u CHR 136,0 0t0 3 /dev/pts/0
bash 2189 root 2u CHR 136,0 0t0 3 /dev/pts/0
1
2
3
4
5
6
7
指定進程號,能夠查看該進程打開的文件
[root@hai7 ~]$lsof -p 2189
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2189 root cwd DIR 8,3 4096 64 /data
bash 2189 root mem REG 8,2 106070960 101092451 /usr/lib/locale/locale-archive
... <==省略部份內容
bash 2189 root 0u CHR 136,0 0t0 3 /dev/pts/0
1
2
3
4
5
6
經過參數-i查看網絡鏈接的狀況,包括鏈接的ip、端口等以及一些服務的鏈接狀況,例如:sshd等,也能夠經過制定ip查看該ip的網絡鏈接狀況
lsof -i -n
lsof -i@127.0.0.1
經過參數-i:端口,能夠查看端口的佔用狀況,-i參數還有查看協議,ip的鏈接狀況等
lsof -i:80 -n
查看指定狀態的網絡鏈接
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names, -p:no port names
-i:TCP指定協議
-s:指定協議狀態經過多個參數能夠清晰的查看網絡鏈接狀況、協議鏈接狀況等
恢復刪除文件,此方法只適用於正在使用的文件
1. 肯定文件是在使用中
[root@hai7 ~]$lsof /var/log/messages
2. 刪除文件
[root@hai7 ~]$rm -f /var/log/messages
3. 查看文件進程,拿到進程編號
[root@hai7 ~]$lsof |grep /var/log/messages
4. 進入對應進程下的fd文件
[root@hai7 ~]$cd /proc/1027/fd/
5. 查看文件列表,能夠看到帶有(deleted)的文件
[root@hai7 ~]$ll
lrwx------ 1 root root 64 Sep 6 14:15 3 -> socket:[28141]
l-wx------ 1 root root 64 Sep 6 14:15 4 -> /var/log/messages (deleted) <==丟失的文件
6. 恢復文件,查看丟失的文件,這裏會顯示內容,重定向到刪除目錄
[root@hai7 ~]$cat /proc/1027/fd/4>/var/log/messages
[root@hai7 ~]$ls /var/log/messages
/var/log/messages <==已恢復
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
執行結果說明
$lsof -i tcp
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 744 rpc 8u IPv4 15285 0t0 TCP *:sunrpc (LISTEN)
rpcbind 744 rpc 11u IPv6 15288 0t0 TCP *:sunrpc (LISTEN
1
2
3
4
COMMAND:進程的名稱
PID:進程標識符
USER:進程全部者
FD:文件描述符,應用程序經過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
7 命令kill、pkill
7.1 kill命令
用來刪除執行中的程序或工做,kill可將指定的信息送至程序。預設的信息爲SIGTERM(15),可將指定程序終止。若仍沒法終止該程序,可以使用SIGKILL(9)信息嘗試強制刪除程序。程序或工做的編號可利用ps指令或job指令查看
格式
kill [選項] [參數]
選項
-l :列出指定編號的信息,不指定則列出所有的信息名稱
-n:指定信號,編號或名稱均可以
-u:指定用戶
信號
介紹
向進程發送控制信號,以實現對進程管理,每一個信號對應一個數字,信號名稱以SIG開頭,不區分大小寫
查看
顯示當前系統可用信號:kill -l, trap -l
經常使用信號:man 7 signal
指定信號的方法
(1)信號的數字標識:一、二、9
(2)信號完整名稱:SIGHUP
(3)信號的簡寫名稱:HUP
經常使用信號
編號 名稱 做用
1 SIGHUP 無須關閉進程而讓其重讀配置文件
2 SIGINT 終止正在運行的進程;至關於Ctrl+c\
3 SIGQUIT 至關於ctrl+\
9 SIGKILL 強制殺死正在運行的進程
15 SIGTERM 終止正在運行的進程
18 SIGCONT 繼續運行
19 SIGSTOP 後臺休眠
示例
終止程序nano
1: 找到對應PID
[root@hai7 ~]$ps -C nano
PID TTY TIME CMD
4763 pts/0 00:00:00 nano
2:終止進程,指定信號15
[root@hai7 ~]$kill -n 15 4812
1
2
3
4
5
6
強制終止httpd服務
[root@hai7 ~]$echo $$ <==查看當前bash進程
2189
[root@hai7 ~]$kill 2189 <==嘗試終止進程,沒有終止
[root@hai7 ~]$kill -9 2189 <==使用9信號,強制終止
1
2
3
4
終止所有同名進程
[root@hai7 ~]$pidof httpd <==httpd有不少進程,也能夠直接終止父進程
9919 9918 9917 9916 9915 9914 9913 9912 9909
[root@hai7 ~]$killall -15 httpd <==這裏主要爲說明killall用法
1
2
3
7.2 命令pkill
與pgrep用法類似,查找同時能夠終止進程
格式
pkill [options] pattern
選項
選項 含義
-signal 發送信號給匹配到的進程
-u uid effective user,生效者
-U uid real user ,真正發起運行命令者
-t terminal 與指定終端相關的進程
-l 顯示進程名(pgrep可用)
-a 顯示完整格式的進程名(pgrep可用)
-P pid 顯示指定進程的子進程
示例
刪除全部以http開頭的進程
pkill -9 "^http"
刪除終端1的進程
[root@hai7 ~]$pkill -t pts/1 <==結束部分運行進程
[root@hai7 ~]$pkill -t pts/1 -9 <==連同終端一塊兒關閉
---------------------
做者:你的微笑像茉莉
來源:CSDN
原文:https://blog.csdn.net/free050463/article/details/82842273
版權聲明:本文爲博主原創文章,轉載請附上博文連接!編程