新聞中心
CPU與內(nèi)存觀測
vmstat
vmstat全名是虛擬內(nèi)存統(tǒng)計信息命令,看起來好像是用來觀測內(nèi)存的,實際上cpu、內(nèi)存、io資源它都能觀測。

成都創(chuàng)新互聯(lián)成立10余年來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)站策劃、網(wǎng)頁設(shè)計、國際域名空間、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補等服務(wù)。網(wǎng)站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設(shè)都非常重要,成都創(chuàng)新互聯(lián)通過對建站技術(shù)性的掌握、對創(chuàng)意設(shè)計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進步。
$ vmstat -w 1
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 12531512 102680 274940 0 0 0 3 0 3 0 0 100 0 0
2 0 0 12531512 102680 274940 0 0 0 0 106 55 25 0 75 0 0
2 0 0 12531512 102680 274940 0 0 0 0 105 58 25 0 75 0 0
2 0 0 12531512 102680 274940 0 0 0 0 105 56 25 0 75 0 0
1s顯示一次,第一行是系統(tǒng)啟動以來的統(tǒng)計信息,一般可忽略不看,從第二行開始看即可。
- r:cpu運行隊列長度,即有多少線程等待操作系統(tǒng)調(diào)度運行,這可看做是cpu的飽和度指標,長時間處于高值一般都有問題。
- b: 不可中斷阻塞的線程數(shù)量,一般就是阻塞于io訪問的線程數(shù)量。
- swpd: 內(nèi)存交換到磁盤的內(nèi)存大小,單位kB
- free:剩余內(nèi)存大小,單位kB
- buff: 用于buff的內(nèi)存大小,單位kB
- cache:用于文件頁面緩存的內(nèi)存大小,單位kB
- si:磁盤換入到內(nèi)存的當前速度,單位kB/s
- so:內(nèi)存換出到磁盤的當前速度,單位kB/s
- bi:每秒讀取的磁盤塊數(shù)量,單位blocks/s
- bo:每秒寫入的磁盤塊數(shù)量,單位blocks/s
- in:每秒中斷數(shù)量
- cs:每秒線程上下文切換次數(shù)
- us:cpu用戶態(tài)使用率
- sy:cpu內(nèi)核態(tài)使用率
- id:cpu空閑率
- wa:等待I/O,線程被阻塞等待磁盤I/O時的CPU空閑時間占總時間的比例
- st:steal偷取,CPU在虛擬化環(huán)境下在其他租戶上的開銷
mpstat
mpstat是用來查看cpu上各個核的cpu使用率的,如下:
$ mpstat -P ALL 1
Linux 4.19.128-microsoft-standard (DESKTOP-GC9LLHC) 10/24/21 _x86_64_ (8 CPU)
12:39:37 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
12:39:38 all 24.57 0.00 0.00 0.00 0.00 1.72 0.00 0.00 0.00 73.71
12:39:38 0 0.00 0.00 0.00 0.00 0.00 12.28 0.00 0.00 0.00 87.72
12:39:38 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:39:38 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:39:38 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:39:38 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:39:38 5 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:39:38 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
12:39:38 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
如上,可見3、5號核的cpu使用率基本滿載,而其它核非??臻e,這一般是由于程序多線程設(shè)計上有問題,導致某部分線程非常忙,另一部分線程沒事干,而mpstat就是用來觀測是否有這種cpu核負載不均的問題的。
上面之所以cpu不均衡,是因為我使用stress命令,讓2個核滿載了,如下:
$ stress -c 2
另外,如果你使用了Linux中的綁核機制,將程序固定在某些核上運行,但綁核配置不合理,也會出現(xiàn)這種現(xiàn)象,如下,我將已在運行的stree進程綁定到1,2號核上運行:
# 查詢stress進程號
$ pgrep stress
5477
5478
5479
#使用taskset綁核
$ taskset -pc 1,2 5478
pid 5478 current affinity list: 0-7
pid 5478 new affinity list: 1,2
$ taskset -pc 1,2 5479
pid 5479 current affinity list: 0-7
pid 5479 new affinity list: 1,2
#查看綁核情況
$ taskset -pc 5479
pid 5479 current affinity list: 1,2
# 用mpstat查看cpu使用率,現(xiàn)在發(fā)現(xiàn)1,2號核都100%了
$ mpstat -P ALL 1 1
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 24.78 0.00 0.00 0.00 0.00 0.99 0.00 0.00 0.00 74.23
Average: 0 0.00 0.00 0.00 0.00 0.00 7.48 0.00 0.00 0.00 92.52
Average: 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
注:綁核其實有利有弊的,程序綁定在某些核上運行,可以避免線程在核間遷移,從而提高CPU緩存的利用率,但一般來說,現(xiàn)在的大多數(shù)程序其實是不推薦使用綁核機制的,這應(yīng)該交給Docker等基礎(chǔ)設(shè)施來管理。
top
上面的vmstat、mpstat命令只能看整個系統(tǒng)的情況,而top、pidstat則可以看各個進程的情況,如下:
$ top
top - 13:14:07 up 2 days, 6:38, 0 users, load average: 1.65, 0.59, 0.27
Tasks: 17 total, 3 running, 14 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.0 us, 0.0 sy, 0.0 ni, 74.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 12693.4 total, 12052.8 free, 271.6 used, 368.9 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 12171.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3174 work 20 0 3860 104 0 R 100.0 0.0 1:40.75 stress
3175 work 20 0 3860 104 0 R 100.0 0.0 1:40.76 stress
1 root 20 0 900 492 428 S 0.0 0.0 0:00.11 init
10 work 20 0 10044 5140 3424 S 0.0 0.0 0:00.12 bash
3051 work 20 0 6393208 204364 20116 S 0.0 1.6 0:07.51 java
3173 work 20 0 3860 980 896 S 0.0 0.0 0:00.00 stress
3176 work 20 0 10888 3932 3348 R 0.0 0.0 0:00.02 top
- 第一行是系統(tǒng)概要:當前時間,系統(tǒng)啟動時長,系統(tǒng)用戶數(shù),系統(tǒng)負載1min/5min/15min
- 第二行是任務(wù)概要:總?cè)蝿?wù)數(shù),正在運行/睡眠/暫停/僵尸任務(wù)數(shù)
- 第三行cpu使用率:
us:非niced進程花費的cpu時間占比
sy:內(nèi)核進程花費的cpu時間占比
ni:niced進程花費的cpu時間占比
id:內(nèi)核空閑進程花費的cpu時間占比,一般來說CPU是無法空閑的,CPU空閑著,指的是在運行一個空閑程序的代碼。
wa:等待磁盤io完成花費的cpu時間占比
hi:處理硬件中斷花費的cpu時間占比
si:處理軟件中斷花費的cpu時間占比
st:被其它虛擬機偷取的cpu時間占比 - 第四行是內(nèi)存使用率:
total:總內(nèi)存大小(MB)
free:空閑內(nèi)存大小(MB)
used:使用中的內(nèi)存大小(MB)
buff/cache:用于文件緩存與系統(tǒng)緩存的內(nèi)存大小(MB) - 第五行是swap情況:
total:總swap文件大小
free:swap空閑大小
used:swap使用大小
avail Mem:可用內(nèi)存大小,和swap無關(guān),約等于上一行中free+buff/cache
下面的列表顯示的就是各進程情況了,除此之外,top還是個交互式命令,可直接在這個界面輸入指令使用其更多功能,如下:
| 指令 | 功能描述 |
|---|---|
| 1 | 查看1號cpu各核的cpu使用情況,類似mpstat |
| M | 進程按內(nèi)存使用率倒序,同時按shift + m |
| P | 進程按cpu使用率倒序,同時按shift + p |
| H | 查看線程情況,同時按shift + h |
| c | 查看進程的完整命令行 |
| k | 殺死指定pid的進程 |
| h | 查看幫助 |
| q | 退出top |
注意,這里面的指令,很多都是開關(guān)式的,比如按1顯示cpu各核使用率,再按1就顯示整體cpu使用率了。
另外,如果你的電腦是8核的,top中進程的CPU%最高可以到800%,初次看到這種現(xiàn)象時,還很容易嚇一跳呢!
pidstat
pidstat基本和top功能是類似的,不過它是非交互式的命令,一般作為top的補充使用,如下:
# 默認查看活動進程的cpu使用情況,加-t可以查看線程的
$ pidstat 1
13:32:45 UID PID %usr %system %guest %wait %CPU CPU Command
13:32:46 1000 3051 0.00 1.00 0.00 0.00 1.00 1 java
13:32:46 1000 3241 100.00 0.00 0.00 0.00 100.00 7 stress
13:32:46 1000 3242 100.00 0.00 0.00 0.00 100.00 5 stress
Average: UID PID %usr %system %guest %wait %CPU CPU Command
Average: 1000 3051 0.00 0.33 0.00 0.00 0.33 - java
Average: 1000 3241 100.00 0.00 0.00 0.00 100.00 - stress
Average: 1000 3242 100.00 0.00 0.00 0.00 100.00 - stress
# -w可以看線程上下文切換情況
# cswch/s:自愿上下文切換,比如等待io或鎖
# nvcswch/s:非自愿上下文切換,比如分給自己時間片用完了,一般需要關(guān)注這個,因為現(xiàn)在的程序大多是io密集型的,用完時間片的機會很少
$ pidstat -w 1
13:37:57 UID PID cswch/s nvcswch/s Command
13:37:58 1000 3299 1.00 0.00 pidstat
13:37:58 UID PID cswch/s nvcswch/s Command
13:37:59 0 8 1.00 0.00 init
13:37:59 1000 9 1.00 0.00 wsltermd
13:37:59 1000 3299 1.00 0.00 pidstat
# -v可以看運行進程的線程數(shù)與文件描述符數(shù)量
$ pidstat -v 1
01:41:34 PM UID PID threads fd-nr Command
01:41:35 PM 1000 876 95 177 java
# -r可以看運行進程的內(nèi)存使用情況以及缺頁情況
# minflt/s:輕微缺頁,一般不用太關(guān)注
# majflt/s:嚴重缺頁,一般意味著發(fā)生了swrap,量較大時需要關(guān)注
$ pidstat -r 1
02:07:24 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
02:07:25 PM 999 2786 2.00 0.00 52792 3140 0.08 redis-server
02:07:25 PM 1000 601098 1.00 0.00 13976 6296 0.16 sshd
# -d可以看某個進程的io使用情況
$ pidstat -d 1
14:12:06 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
14:12:07 1000 3051 0.00 80.00 0.00 0 java
14:12:07 1000 3404 0.00 0.00 0.00 79 stress
free
其實上面的vmstat、top已經(jīng)可以看到內(nèi)存使用情況了,free命令更純粹一點,如下:
# 查看內(nèi)存使用情況,-m以MB為單位,-g可以使其以GB為單位
$ free -m
total used free shared buff/cache available
Mem: 3907 1117 778 3 2012 2503
Swap: 1897 708 1189
要特別注意里面的free、buff/cache以及available,如下:
- free:系統(tǒng)空閑內(nèi)存,一般來說,隨著使用時間越來越長,Linux中free會越來越小,原因是Linux會把訪問的文件數(shù)據(jù)盡可能地緩存在內(nèi)存中,以便下次讀取時能快速返回
- buff/cache:就是文件緩存到內(nèi)存中所占內(nèi)存的大小
- available:系統(tǒng)真正的可用內(nèi)存,約等于
free+buff/cache,所以系統(tǒng)內(nèi)存是否足夠,你應(yīng)該看available的值。
slabtop
slab是Linux操作系統(tǒng)的一種內(nèi)存分配機制。slab分配器是基于對象進行管理,相同類型的對象歸為一類(如進程描述符就是一類),每申請這樣一個對象,slab分配器就從一個slab列表中分配一個這樣大小的單元出去,而釋放時,將其重新保存在該列表中,當以后又要請求新的對象時,就可以從列表中直接獲取而不用重復(fù)初始化。
其實你可以直接把它理解為內(nèi)核實現(xiàn)對象池的一種機制,它包含在buff/cache列中,如下可以觀測它的內(nèi)存占用情況:
$ sudo slabtop
Active / Total Objects (% used) : 1641750 / 1772440 (92.6%)
Active / Total Slabs (% used) : 35906 / 35906 (100.0%)
Active / Total Caches (% used) : 107 / 158 (67.7%)
Active / Total Size (% used) : 512123.18K / 553465.83K (92.5%)
Minimum / Average / Maximum Object : 0.01K / 0.31K / 16.75K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
282324 246579 87% 0.19K 6722 42 53776K dentry
173824 159910 91% 0.03K 1358 128 5432K kmalloc-32
173784 164054 94% 0.10K 4456 39 17824K buffer_head
167580 159572 95% 0.13K 2793 60 22344K kernfs_node_cache
100839 89862 89% 1.07K 3479 29 111328K ext4_inode_cache
91260 86183 94% 0.81K 2340 39 74880K fuse_inode
65084 62708 96% 0.59K 1228 53 39296K inode_cache
64576 64401 99% 0.50K 1009 64 32288K kmalloc-512
53120 51516 96% 0.06K 830 64 3320K anon_vma_chain
磁盤觀測
df
df命令可以很容易的看到文件系統(tǒng)的空間使用情況,如下:
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 1.9G 0 1.9G 0% /dev
tmpfs 391M 2.7M 389M 1% /run
/dev/sda1 276G 150G 115G 57% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/sda1的Use%這一列可以看到磁盤使用了57%了。
iostat
iostat命令可以很方便的查看磁盤當前的IO情況,如下:
$ iostat -xz 1
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.00 0.00 0.00 99.94
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 1.87 17854.96 3799.10 14930.26 42642.19 208548.03 26.82 7.10 0.37 1.04 0.20 0.28 522.73
avg-cpu: %user %nice %system %iowait %steal %idle
4.36 0.00 0.00 0.00 0.00 95.64
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 606.00 0.00 2616.00 8.63 0.04 0.06 0.00 0.06 0.06 3.40
注意,和vmstat一樣,第一次的輸出結(jié)果是歷史以來的統(tǒng)計值,一般可以忽略不計,如下:
- %util :磁盤使用率,Linux認為磁盤只能處理一個并發(fā),但SSD或raid實際可以超過一個,所以100%也不一定代表滿載。
- avgqu-sz:磁盤任務(wù)隊列長度,大于磁盤的并發(fā)任務(wù)數(shù)則磁盤處于飽和狀態(tài)。
- svctm:平均服務(wù)時間,不包括在磁盤隊列中的等待時間。
- r_await,w_await:讀寫延遲時間(ms),磁盤隊列等待時間+svctm,太大則磁盤飽和。
- r/s + w/s: 就是當前的IOPS。
- avgrq-sz:就是當前每秒平均吞吐量 單位是扇區(qū)(512b)。
注:上面的命令輸出結(jié)果是centos中的,ubuntu中iostat命令輸出結(jié)果稍有不同。
iotop
iotop以進程的角度查看io情況,如下:
# -P表示只看進程整體的,不然iotop看的是每個線程的
# -o表示只看有io操作的進程,不然iotop會列出所有進程
$ sudo iotop -P -o
Total DISK READ: 3.84 K/s | Total DISK WRITE: 138.97 M/s
Current DISK READ: 3.84 K/s | Current DISK WRITE: 80.63 M/s
PID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
737183 be/4 root 3.84 K/s 0.00 B/s 0.00 % 88.89 % [kworker/u256:1+flush-8:0]
761496 be/4 work 0.00 B/s 138.96 M/s 0.00 % 79.09 % stress -d 1
876 be/4 work 0.00 B/s 7.68 K/s 0.00 % 0.00 % java -Xms256m -Xmx1g -Xss1m -XX:MaxMetaspaceSize=1g ...
可以看到整個磁盤的當前讀寫速率,以及各個進程占用的比例。
hcache與vmtouch
當我們訪問一個文件時,內(nèi)核會幫我們將文件數(shù)據(jù)緩存到內(nèi)存中,就是上面free命令中buff/cache這一項,而hcache與vmtouch則可以查看文件緩存的詳細信息,如下:
# 查看前6個文件的pagecache大戶
$ sudo ./hcache -top 6
+---------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|---------------------------------------------------------------------+----------------+------------+-----------+---------|
| /var/log/journal/ae4a8a4eec6f418a9596826e2f4f6891/system.journal | 33554432 | 8192 | 7415 | 090.515 |
| /snap/core/11993/usr/lib/snapd/snapd | 24113872 | 5888 | 3777 | 064.147 |
| /usr/bin/dockerd | 104770064 | 25579 | 2692 | 010.524 |
| /usr/local/mysql/bin/mysqld | 227306584 | 55495 | 1774 | 003.197 |
| /var/log/journal/ae4a8a4eec6f418a9596826e2f4f6891/user-1000.journal | 8388608 | 2048 | 1590 | 077.637 |
| /usr/bin/python3.8 | 5482296 | 1339 | 1072 | 080.060 |
+---------------------------------------------------------------------+----------------+------------+-----------+---------+
# 查看指定文件的pagecache詳細信息
$ vmtouch -v /usr/local/mysql/bin/mysqld
/usr/local/mysql/bin/mysqld
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 55495/55495
Files: 1
Directories: 0
Resident Pages: 55495/55495 216M/216M 100%
Elapsed: 0.000275 seconds
# 清除指定文件的pagecache
$ vmtouch -ve /var/log/journal/ae4a8a4eec6f418a9596826e2f4f6891/system.journal
Evicting /var/log/journal/ae4a8a4eec6f418a9596826e2f4f6891/system.journal
Files: 1
Directories: 0
Evicted Pages: 8192 (32M)
Elapsed: 0.008735 seconds
# 清除pagecache與slab,一般沒必要這么做,除非很清楚自己在做什么
$ sync # 將修改過的pagecache(臟頁),寫回到磁盤
$ echo 1 > /proc/sys/vm/drop_caches # 清除pagecache
$ echo 2 > /proc/sys/vm/drop_caches # 清除slab
$ echo 3 > /proc/sys/vm/drop_caches # 清除pagecache與slab
hcache下載地址:https://github.com/silenceshell/hcache
網(wǎng)絡(luò)觀測
nicstat
nicstat可以查看整個網(wǎng)卡的使用情況,如下:
$ nicstat -z 1
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:22 ens33 38.09 7.13 32.03 6.77 1217.8 1078.4 0.03 0.00
22:35:22 lo 0.07 0.07 0.36 0.36 207.6 207.6 0.00 0.00
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:23 ens33 0.27 0.56 3.99 4.99 69.50 114.0 0.00 0.00
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:24 ens33 0.21 0.34 3.00 3.00 72.67 116.7 0.00 0.00
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:25 ens33 0.28 0.33 4.00 3.00 70.50 111.3 0.00 0.00
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:26 ens33 0.34 0.34 5.00 3.00 69.20 116.7 0.00 0.00
Time Int rKB/s wKB/s rPk/s wPk/s rAvs wAvs %Util Sat
22:35:27 ens33 0.28 0.33 4.00 3.00 70.50 111.3 0.00 0.00
其中%Util就是網(wǎng)卡帶寬的使用率了。
iftop
iftop可以用來查看整個網(wǎng)卡以及各個連接的當前網(wǎng)速,如下:
$ sudo iftop -B -nNP
244KB 488KB 732KB 977KB 1.19MB
└──────────────────────────────┴──────────────────────────────┴───────────────────────────────┴──────────────────────────────┴───────────────────────────────
10.134.60.10:10100 => 10.134.92.10:29318 85.8KB 103KB 94.3KB
<= 2.95KB 3.54KB 3.25KB
10.134.60.10:10100 => 10.134.93.9:30981 170KB 103KB 94.3KB
<= 5.41KB 3.49KB 3.21KB
10.134.60.10:35172 => 10.134.24.54:3961 13.3KB 9.88KB 5.25KB
<= 58.6KB 60.6KB 32.4KB
10.134.60.10:43240 => 10.134.24.55:3960 9.83KB 5.52KB 3.09KB
<= 101KB 53.6KB 31.1KB
10.134.60.10:60932 => 10.134.24.55:3961 4.45KB 5.07KB 6.04KB
<= 35.0KB 39.8KB 47.4KB
10.134.60.10:58990 => 10.134.24.5:80 22.0KB 19.2KB 22.5KB
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX: cum: 10.9MB peak: 1.75MB rates: 611KB 438KB 557KB
RX: 6.49MB 453KB 360KB 296KB 332KB
TOTAL: 17.4MB 2.19MB 972KB 735KB 889KB
另外,在nicstat、iftop命令不可用的情況下,也可以使用ifconfig + awk來查看網(wǎng)速,單位B/s,如下:
$ while sleep 1;do ifconfig;done|awk -v RS= 'match($0,/^(\w+):.*RX.*bytes ([0-9]+).*TX.*bytes ([0-9]+)/,a){eth=a[1];if(s[eth][1])print a[1],a[2]-s[eth][2],a[3]-s[eth][3];for(k in a)s[eth][k]=a[k]}'
eth0 294873 353037
lo 2229 2229
eth0 613730 666086
lo 17981 17981
eth0 317336 544921
lo 5544 5544
eth0 237694 516947
lo 2256 2256
全能觀測工具sar
sar是一個幾乎全能的觀測工具,它可以觀測CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等等,不像上面的命令,只是側(cè)重某一方面,正因為它如此強大,掌握起來也要難得多,它的常見用法如下:
# cpu使用率
sar -u ALL 1
# 運行隊列與負載
sar -q 1
# 中斷次數(shù)
sar -I SUM 1
# 進程創(chuàng)建次數(shù)與線程上下文切換次數(shù)
sar -w 1
# 內(nèi)存使用、臟頁與slab
sar -r ALL 1
# 缺頁與內(nèi)存頁掃描
sar -B 1
# 內(nèi)存swap使用
sar -S 1 1
sar -W 1
# 磁盤IOPS
sar -dp 1
# 文件描述符與打開終端數(shù)
sar -v 1 1
# 網(wǎng)卡層使用率
sar -n DEV 1
# tcp層收包發(fā)包情況
sar -n TCP,ETCP 1
# socket使用情況
sar -n SOCK 1
這只是列出了sar的一部分用法,實際上sar可以觀測到非常多的內(nèi)容,具體可以man sar查看。
USE法
從上面介紹的命令來看,能觀測到的指標非常多,讓人眼花繚亂,一時抓不住重點,好在性能優(yōu)化大師Brendan Gregg為我們總結(jié)了USE法,告訴了我們應(yīng)該重點關(guān)注硬件資源的哪些指標,如下:
- 使用率(utilization):即資源使用的百分比,如CPU使用率,內(nèi)存使用率。
- 飽和度(saturation):即資源的飽和情況,如大多數(shù)資源都有使用排隊機制,飽和度代表隊列中有多少任務(wù)等待處理。
- 錯誤(errors):即訪問資源時發(fā)生的錯誤。
注:使用率與使用率是不同的,比如CPU使用率一般代表時間占用比例,如1s中有800ms在執(zhí)行真正的代碼,CPU使用率就是80%,而內(nèi)存使用率50%,指的是容量使用了一半,所以使用率可細分為基于容量的使用率與基于時間的使用率。
可以用Java中的線程池來理解這3個指標,如下:
- 線程池是一個軟件資源。
- 線程池的使用率:目前正在運行任務(wù)線程數(shù)占線程池總線程數(shù)的百分比。
- 線程池的飽和度:目前正在線程池任務(wù)隊列中排隊的任務(wù)數(shù)量。
- 線程池的錯誤:觸發(fā)線程池拒絕策略的次數(shù)。
對于CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)這4個常見資源,并結(jié)合上面介紹的命令,可得出如下的表格:
| 資源 | 使用率(utilization) | 飽和度(saturation) | 錯誤(errors) |
|---|---|---|---|
| CPU | vmstat 1中"us" + "sy" + "st"
|
vmstat 1中r列大于虛擬cpu數(shù)量
|
- |
| 內(nèi)存 | free -m的available
|
vmstat 1的"si"與"so"
|
- |
| 磁盤 | iostat -xz 1的"%util"
|
iostat -xz 1的"avgqu-sz" > 1或"await"居高不下
|
- |
| 網(wǎng)絡(luò) | iftop的rates
|
ifconfig的"overruns"與"dropped"
|
ifconfig的 "errors"與"dropped"
|
全能監(jiān)控工具
還有很多類似sar的全能觀測工具,大多都比較炫酷,在個人筆記本上使用較多,服務(wù)器上采用較少,如下:
dstat
bpytop
glances
nmon
名稱欄目:Linux系統(tǒng)查看硬件資源損耗
文章來源:http://www.dlmjj.cn/article/dhocpce.html


咨詢
建站咨詢
