top命令通常用于動態(tài)顯示進程的變化信息,監(jiān)控Linux系統(tǒng)狀態(tài)。top命令是Linux下常用的性能分析工具,能夠實時顯示系統(tǒng)中各個進程的資源占用狀況,跟windows下的資源管理器類似。
成都創(chuàng)新互聯(lián)專注于香河企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,商城系統(tǒng)網(wǎng)站開發(fā)。香河網(wǎng)站建設公司,為香河等地區(qū)提供建站服務。全流程按需定制開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務
-d time:指定屏幕刷新時間的間隔,默認為3秒;
-n NUM:設置循環(huán)顯示的次數(shù);
-p PID:指定要監(jiān)控的進程ID;
-u USER|UID:按照給定的用戶名或UID顯示對應用戶相關的進程信息;
在使用top命令進入其進程的監(jiān)控界面后,可輸入一些交互指令來幫助對當前顯示的信息進行篩選,常見的交互指令有:
P:以占據(jù)CPU百分比排序;
M:以占據(jù)內存百分比進行排序;
T:以累積占用CPU時間進行排序;
l:隱藏uptime信息;
t:隱藏tasks及CPU信息;
m:隱藏內存信息;
s:修改刷新時間間隔;
k:終止指定的進程;
top命令的信息輸出大致可以分為兩部分:
1、系統(tǒng)運行的相關統(tǒng)計信息。
2、相關進程的狀態(tài)及運行信息。
其中系統(tǒng)運行的相關統(tǒng)計信息,通常為top命令輸出信息的上面部分,如下圖:
其中每行代表的含義為:
第一行 :
第一行的輸出信息還可以通過uptime命令來進程輸出:
第二行 :
第三行 :
第四行 :
第五行 :
total:交換分區(qū)的總量;
used:使用的交換分區(qū)總量;
free:空閑的交換分區(qū)總量;
cached:緩沖的交換分區(qū)總量;
而第二部分的top命令輸出如下圖所示:
從第一行往下的每一行都代表著一個進程的運行狀態(tài)信息,而第一行各字段的含義分別為:
top命令是Linux下常用的性能分析工具,能夠實時顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務管理器。top顯示系統(tǒng)當前的進程和其他狀況,是一個動態(tài)顯示過程,可以自動或者通過用戶按鍵來不斷刷新當前狀態(tài)。如果在前臺執(zhí)行該命令,它將獨占前臺,直到用戶終止該程序為止.。比較準確的說,top命令提供了實時的對系統(tǒng)處理器的狀態(tài)監(jiān)控,顯示系統(tǒng)中CPU最“敏感”的任務列表。top命令可以按CPU使用、內存使用和執(zhí)行時間對任務進行排序。而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.。
下面詳細介紹它的使用方法。
對于一個新手來說,如果從來沒有使用過top命令,在命令行模式下直接輸入top,可以查看到當前所有進程的信息。
輸出結果中,有很多指標。下面介紹各個指標都代表什么含義。
top命令輸出結果中,統(tǒng)計信息區(qū)前五行是系統(tǒng)整體的統(tǒng)計信息。
第一行是任務隊列信息,同 uptime 命令的執(zhí)行結果。其內容如下:
第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:
最后兩行為內存信息。內容如下:
進程信息區(qū)統(tǒng)計信息區(qū)域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。
默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容。
參考列表:
在 Linux性能分析-平均負載 中,提到過一種導致平均負載升高的情況,就是有大量進程或線程等待cpu調度。
為什么大量進程或者線程等待CPU調度會導致負載升高呢?
當大量進程或者線程等待調度時,cpu需要更加頻繁的切換任務,在切換任務的過程中,需要保存上一個任務的context到內核中,并且恢復當前任務的context,這種保存和恢復的操作也是需要cpu來執(zhí)行的,導致cpu都消耗在了 保存上文和恢復下文 這個過程中。
除了進程和線程導致的上下文切換以外,硬件產生的中斷事件也會導致上下文切換。并且中斷事件的優(yōu)先級是高于線程和進程任務的。
這篇文章會模擬測試這種情況。
vmstat是一個觀測總體上下文切換狀況的命令。
下面指令可以每隔5秒輸出一組數(shù)據(jù)。
重點關注列含義:
使用vmstat關注到了整體的情況,接下來可以使用pidstat關注具體線程的情況
注:pidstat -wt 可以輸出線程的情況
重點關注列含義:
系統(tǒng)環(huán)境:
首先安裝sysbench,使用sysbench,我們可以模擬一個進程內多線程調度引起的上下文切換問題。
安裝好后,執(zhí)行下面命令
查看下vmstat和pidstat
觀察vmstat結果,可以看到
觀察pidstat兩類結果,可以發(fā)現(xiàn)
整體結果符合我們的預期。
針對in列顯著提高,可以查看 /proc/interrupts 文件,里面記錄了中斷相關的數(shù)據(jù),這些數(shù)據(jù)記錄的是從上次啟動到現(xiàn)在的累加值。
我們把系統(tǒng)重新啟動下,看下空閑狀態(tài)下的文件
當執(zhí)行sysbench命令后,并運行一段時間后,該文件如下
其中,LOC和RES顯著升高
RES表示,喚醒空閑狀態(tài)的CPU來調度新的任務運行,和我們模擬的過多任務調度有關。
LOC不太理解,暫時先放在這里。
當你在IDC主機商購買一臺系統(tǒng)為 Linux 服務器之后,我想大家第一時間就是對主機進行一個性能分析,這里我跟大家分享幾個命令,能讓大家在一分鐘以內對自己的性能有一個大致的鳥解?
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
這10個命令到底是什么意思,我為大家一一解釋一下:
1.uptime
# uptime
03:16:26 up 21:31, 1 user, load average: 10.02, 06.43, 09.02
在上面的例子中,平均負載顯示是在不斷增加的,1 分鐘的值是 10,相比 15 分鐘的值 09 來說是增加了。這個數(shù)字這么大就意味著有事情發(fā)生了.
2. dmesg | tail
# dmesg | tail
[? 14.102501] ISO 9660 Extensions: RRIP_1991A
[? 15.900216] ISO 9660 Extensions: Microsoft Joliet Level 3
[? 15.900234] ISO 9660 Extensions: RRIP_1991A
[? 17.030540] EXT4-fs (vda1): resizing filesystem from 5242619 to 13106939 blocks
[? 17.151434] random: crng init done
[? 17.151436] random: 7 urandom warning(s) missed due to ratelimiting
[? 18.314268] EXT4-fs (vda1): resized filesystem to 13106939
[? 20.394666] new mount options do not match the existing superblock, will be ignored
[? 38.405804] ISO 9660 Extensions: Microsoft Joliet Level 3
[? 38.407599] ISO 9660 Extensions: RRIP_1991A
這里展示的是最近 10 條系統(tǒng)消息日志,如果系統(tǒng)消息沒有就不會展示。主要是看由于性能問題導致的錯誤。
3. vmstat 1
# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r? b? swpd? free? buff? cache? si? so? ? bi? ? bo? in? cs us sy id wa st
1? 0? ? ? 0 324644 141184 1270628? ? 0? ? 0? ? 10? ? 40? 207? 431? 1? 1 99? 0? 0
0? 0? ? ? 0 324388 141184 1270628? ? 0? ? 0? ? 0? ? 0? 130? 280? 1? 1 98? 0? 0
0? 0? ? ? 0 324388 141184 1270628? ? 0? ? 0? ? 0? ? 0? 89? 169? 0? 0 100? 0? 0
0? 0? ? ? 0 324420 141184 1270628? ? 0? ? 0? ? 0? ? 0? 118? 225? 1? 0 99? 0? 0
0? 0? ? ? 0 324420 141184 1270628? ? 0? ? 0? ? 0? ? 32? 125? 254? 0? 0 99? 1? 0
1? 1? ? ? 0 324420 141184 1270628? ? 0? ? 0? ? 0? ? 68? 96? 171? 0? 0 96? 4? 0
0? 0? ? ? 0 324452 141184 1270628? ? 0? ? 0? ? 0? 184? 127? 166? 0? 1 96? 3? 0
^C
r: CPU 上的等待運行的可運行進程數(shù)。這個指標提供了判斷 CPU 飽和度的數(shù)據(jù),因為它不包含 I/O 等待的進程。可解釋為:“r” 的值比 CPU 數(shù)大的時候就是飽和的。
free:空閑內存,單位是 k。如果這個數(shù)比較大,就說明你還有充足的空閑內存。“free -m” 和下面第 7 個命令,可以更詳細的分析空閑內存的狀態(tài)。
si,so:交換進來和交換出去的數(shù)據(jù)量,如果這兩個值為非 0 值,那么就說明沒有內存了。
us,sy,id,wa,st:這些是 CPU 時間的分解,是所有 CPU 的平均值。它們是用戶時間,系統(tǒng)時間(內核),空閑,等待 I/O 時間,和被偷的時間(這里主要指其它的客戶,或者使用 Xen,這些客戶有自己獨立的操作域)。
4. mpstat -P ALL 1
# mpstat -P ALL 1
Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
03:33:26 AM? CPU? ? %usr? %nice? ? %sys %iowait? ? %irq? %soft? %steal? %guest? %gnice? %idle
03:33:27 AM? all? ? 0.00? ? 0.00? ? 0.00? ? 1.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? 99.00
03:33:27 AM? ? 0? ? 0.00? ? 0.00? ? 0.00? ? 1.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? 99.00
這個命令打印各個 CPU 的時間統(tǒng)計,可以看出整體 CPU 的使用是不是均衡的。由于我使用的是1H2G主機看不出區(qū)別!
5. pidstat 1
# pidstat 1
Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
03:34:47 AM? UID? ? ? PID? ? %usr %system? %guest? %wait? ? %CPU? CPU? Command
03:34:48 AM? ? 0? ? ? 1120? ? 1.00? ? 0.00? ? 0.00? ? 0.00? ? 1.00? ? 0? sshd
pidstat 命令為每個 CPU 統(tǒng)計信息功能。由于我使用的是1H2G主機看不出區(qū)別!
6. iostat -xz 1
# iostat -xz 1
Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
avg-cpu:? %user? %nice %system %iowait? %steal? %idle
? ? ? 0.67? ? 0.01? ? 0.52? ? 0.29? ? 0.00? 98.52
Device? ? ? ? ? ? r/s? ? w/s? ? rkB/s? ? wkB/s? rrqm/s? wrqm/s? %rrqm? %wrqm r_await w_await aqu-sz rareq-sz wareq-sz? svctm? %util
loop0? ? ? ? ? ? 0.00? ? 0.00? ? ? 0.00? ? ? 0.00? ? 0.00? ? 0.00? 0.00? 0.00? ? 0.22? ? 0.00? 0.00? ? 9.64? ? 0.00? 0.00? 0.00
scd0? ? ? ? ? ? 0.02? ? 0.00? ? ? 0.48? ? ? 0.00? ? 0.00? ? 0.00? 0.00? 0.00? ? 0.21? ? 0.00? 0.00? ? 27.72? ? 0.00? 0.19? 0.00
vda? ? ? ? ? ? ? 0.64? ? 4.07? ? ? 9.15? ? 40.59? ? 0.00? ? 1.99? 0.00? 32.85? ? 3.58? ? 2.31? 0.01? ? 14.31? ? 9.96? 0.24? 0.11
avg-cpu:? %user? %nice %system %iowait? %steal? %idle
? ? ? 0.00? ? 0.00? ? 0.00? ? 0.00? ? 0.00? 100.00
Device? ? ? ? ? ? r/s? ? w/s? ? rkB/s? ? wkB/s? rrqm/s? wrqm/s? %rrqm? %wrqm r_await w_await aqu-sz rareq-sz wareq-sz? svctm? %util
r/s, w/s, rkB/s, wkB/s:這些表示設備上每秒鐘的讀寫次數(shù)和讀寫的字節(jié)數(shù)(單位是k字節(jié))。這些可以看出設備的負載情況。性能問題可能就是簡單的因為大量的文件加載請求。
await:I/O 等待的平均時間(單位是毫秒)。這是應用程序所等待的時間,包含了等待隊列中的時間和被調度服務的時間。過大的平均等待時間就預示著設備超負荷了或者說設備有問題了。
avgqu-sz:設備上請求的平均數(shù)。數(shù)值大于 1 可能表示設備飽和了(雖然設備通常都是可以支持并行請求的,特別是在背后掛了多個磁盤的虛擬設備)。
%util:設備利用率。是使用率的百分數(shù),展示每秒鐘設備工作的時間。這個數(shù)值大于 60% 則會導致性能很低(可以在 await 中看),當然這也取決于設備特點。這個數(shù)值接近 100% 則表示設備飽和了。
7. free -m/h
ubuntu@VM-0-17-ubuntu:~# free -m
? ? ? ? ? total? ? ? ? used? ? ? ? free? ? ? shared? buff/cache? available
Mem:? ? ? ? ? 1833? ? ? ? 137? ? ? ? 313? ? ? ? ? 5? ? ? ? 1381? ? ? ? 1506
Swap:? ? ? ? ? ? 0? ? ? ? ? 0? ? ? ? ? 0
ubuntu@VM-0-17-ubuntu:~$ free -h
? ? ? ? ? total? ? ? ? used? ? ? ? free? ? ? shared? buff/cache? available
Mem:? ? ? ? ? 1.8G? ? ? ? 139M? ? ? ? 311M? ? ? ? 5.8M? ? ? ? 1.3G? ? ? ? 1.5G
Swap:? ? ? ? ? ? 0B? ? ? ? ? 0B? ? ? ? ? 0B
這個命令我相信大家都熟悉,buffers:用于塊設備 I/O 緩沖的緩存,cached:用于文件系統(tǒng)的頁緩存。
8. sar -n DEV 1
ubuntu@VM-0-17-ubuntu:~# sar -n DEV 1
Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
03:43:35 AM? ? IFACE? rxpck/s? txpck/s? ? rxkB/s? ? txkB/s? rxcmp/s? txcmp/s? rxmcst/s? %ifutil
03:43:36 AM? ? ? eth0? ? 11.00? ? 10.00? ? ? 0.79? ? ? 1.06? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00
03:43:36 AM? ? ? ? lo? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00
使用這個工具是可以檢測網(wǎng)絡接口的吞吐:rxkB/s 和 txkB/s,作為收發(fā)數(shù)據(jù)負載的度量,也是檢測是否達到收發(fā)極限。在上面這個例子中,eth0 接收數(shù)據(jù)達到 0.79 kb 字節(jié)/秒,發(fā)送數(shù)據(jù)達到1.06 字節(jié)/秒。
9. sar -n TCP,ETCP 1
ubuntu@VM-0-17-ubuntu:~# sar -n TCP,ETCP 1
Linux 4.15.0-88-generic (VM-0-17-ubuntu) 06/15/2020 _x86_64_ (1 CPU)
03:49:56 AM? active/s passive/s? ? iseg/s? ? oseg/s
03:49:57 AM? ? ? 0.00? ? ? 0.00? ? ? 5.05? ? ? 3.03
03:49:56 AM? atmptf/s? estres/s retrans/s isegerr/s? orsts/s
03:49:57 AM? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00? ? ? 0.00
這是對 TCP 關鍵指標的統(tǒng)計,它包含了以下內容:
active/s:每秒本地發(fā)起的 TCP 連接數(shù)(例如通過 connect() 發(fā)起的連接)。
passive/s:每秒遠程發(fā)起的連接數(shù)(例如通過 accept() 接受的連接)。
retrans/s:每秒TCP重傳數(shù)。
10. top
ubuntu@VM-0-17-ubuntu:~# top
top - 03:53:20 up 1 day,? 1:41,? 1 user,? load average: 0.01, 0.04, 0.00
Tasks:? 89 total,? 1 running,? 52 sleeping,? 0 stopped,? 0 zombie
%Cpu(s):? 0.3 us,? 0.3 sy,? 0.0 ni, 99.3 id,? 0.0 wa,? 0.0 hi,? 0.0 si,? 0.0 st
KiB Mem :? 1877076 total,? 317436 free,? 143420 used,? 1416220 buff/cache
KiB Swap:? ? ? ? 0 total,? ? ? ? 0 free,? ? ? ? 0 used.? 1540856 avail Mem
PID USER? ? ? PR? NI? ? VIRT? ? RES? ? SHR S %CPU %MEM? ? TIME+ COMMAND? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
3730 root? ? ? 20? 0? 105688? 6812? 5840 S? 0.3? 0.4? 0:00.01 sshd? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
7546 root? ? ? 20? 0? 644608? 14924? 6776 S? 0.3? 0.8? 2:48.99 YDService? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1 root? ? ? 20? 0? 159892? 9260? 6796 S? 0.0? 0.5? 0:06.45 systemd? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:00.00 kthreadd? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
4 root? ? ? 0 -20? ? ? 0? ? ? 0? ? ? 0 I? 0.0? 0.0? 0:00.00 kworker/0:0H? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
6 root? ? ? 0 -20? ? ? 0? ? ? 0? ? ? 0 I? 0.0? 0.0? 0:00.00 mm_percpu_wq? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
7 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:04.29 ksoftirqd/0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
8 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 I? 0.0? 0.0? 0:08.85 rcu_sched? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
9 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 I? 0.0? 0.0? 0:00.00 rcu_bh? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
10 root? ? ? rt? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:00.00 migration/0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
11 root? ? ? rt? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:00.16 watchdog/0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
12 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:00.00 cpuhp/0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
13 root? ? ? 20? 0? ? ? 0? ? ? 0? ? ? 0 S? 0.0? 0.0? 0:00.00 kdevtmpfs? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
top 命令包含了很多我們前面提到的指標。這個命令可以很容易看出指標的變化表示負載的變化,這個看起來和前面的命令有很大不同。
top 的一個缺陷也比較明顯,很難看出變化趨勢,其它像 vmstat 和 pidstat 這樣的工具就會很清晰,它們是以滾動的方式輸出統(tǒng)計信息。所以如果你在看到有問題的信息時沒有及時的暫停下來(Ctrl-S 是暫停, Ctrl-Q 是繼續(xù)),那么這些有用的信息就會被清屏。
文章原文: ?(來都來了,就去我博客看下!!)
當前文章:linux性能分析命令 linux 性能命令
網(wǎng)頁鏈接:http://vcdvsql.cn/article16/hpgdgg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、自適應網(wǎng)站、云服務器、網(wǎng)站建設、網(wǎng)站收錄、網(wǎng)頁設計公司
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)