新聞中心
在Linux系統(tǒng)中,Top命令是一個(gè)常用的系統(tǒng)性能監(jiān)視工具。使用Top命令可以實(shí)時(shí)監(jiān)測Linux系統(tǒng)中各項(xiàng)資源的狀態(tài),包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等。Top命令的參數(shù)較多,掌握它們的含義并正確使用可以提高系統(tǒng)管理效率。下面將對(duì)Top命令的常用參數(shù)進(jìn)行介紹。

成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元錦屏做網(wǎng)站,已為上家服務(wù),為錦屏各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
1. 顯示進(jìn)程列表
Top命令默認(rèn)顯示系統(tǒng)的進(jìn)程列表,并按照CPU占用率從高到低進(jìn)行排序。進(jìn)程列表中包括進(jìn)程ID、進(jìn)程名稱、用戶、CPU占用率、內(nèi)存占用率等信息。通過按下“P”鍵可以按照CPU占用率進(jìn)行排序,按下“M”鍵可以按照內(nèi)存占用率進(jìn)行排序。
2. 顯示特定用戶的進(jìn)程列表
如果需要查看特定用戶的進(jìn)程列表,可以使用“-U”參數(shù)。例如,輸入“top -U root”可以顯示root用戶的進(jìn)程列表。
3. 按CPU占用率進(jìn)行排序
使用Top命令最常用的參數(shù)之一就是按照CPU占用率進(jìn)行排序。通過按下“P”鍵可以實(shí)現(xiàn),也可以在命令行中添加“-o %CPU”參數(shù)進(jìn)行設(shè)置,例如“top -o %CPU”。
4. 顯示進(jìn)程的完整命令行
Top命令默認(rèn)只顯示進(jìn)程的名稱,如果需要查看進(jìn)程的完整命令行,可以在Top命令中按下“c”鍵。此外,也可以在命令行中添加“-c”參數(shù)進(jìn)行設(shè)置,例如“top -c”。
5. 顯示系統(tǒng)整體的CPU和內(nèi)存使用情況
除了顯示進(jìn)程列表外,Top命令還可以用來查看系統(tǒng)整體的CPU和內(nèi)存使用情況。在Top命令的頂部,可以看到CPU和內(nèi)存的使用情況,包括總量、已用量、空閑量等信息。
6. 設(shè)置刷新時(shí)間
Top命令的默認(rèn)刷新時(shí)間是3秒鐘。如果需要更改刷新時(shí)間,可以按下“d”鍵,然后在彈出的窗口中輸入所需的刷新時(shí)間,單位為秒。此外,也可以在命令行中添加“-d”參數(shù)進(jìn)行設(shè)置,例如“top -d 5”表示刷新時(shí)間為5秒。
7. 以批處理模式運(yùn)行Top命令
批處理模式是指將Top命令的輸出結(jié)果保存到文件中,而不是實(shí)時(shí)顯示在終端中。在命令行中添加“-b”參數(shù)即可將Top命令運(yùn)行在批處理模式下,例如“top -b > top.log”。
8. 顯示指定進(jìn)程的信息
如果需要查看單個(gè)進(jìn)程的詳細(xì)信息,可以在Top命令中輸入進(jìn)程的PID或者名稱,然后按下“Enter”鍵。此時(shí),Top命令會(huì)顯示該進(jìn)程的詳細(xì)信息,包括進(jìn)程狀態(tài)、線程數(shù)、CPU和內(nèi)存使用情況等。
Top命令是Linux系統(tǒng)中非常重要的一個(gè)工具,可以幫助管理員實(shí)時(shí)監(jiān)視系統(tǒng)資源的狀態(tài)。掌握Top命令的常用參數(shù)可以提高系統(tǒng)管理效率,縮短故障處理時(shí)間,從而提升整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。
相關(guān)問題拓展閱讀:
- linux系統(tǒng)top給出的信息都有哪些
linux系統(tǒng)top給出的信息都有哪些
Linux新手,個(gè)人認(rèn)為首先就應(yīng)該了解納團(tuán)一下top命令各項(xiàng)的含義.
不用有事就問什么搜索引擎,先看看man top.
top – 16:12:56 up 1 day, 22 min, 4 users, load average: 0.02, 0.04, 0.05
Tasks: 158 total, 1 running, 156 sleeping, 0 stopped, 1 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.8 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem:total,used,free,buffers
KiB Swap:total,used,free.cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5761 eechen1076 R 6.2 0.2 0:00.01 top
16:12:56 up 1 day, 22 min, 4 users, load average: 0.02, 0.04, 0.05
這句等同于執(zhí)行 uptime 命令返回的內(nèi)容.
16:12:56 是當(dāng)前時(shí)間(date).
up 1 day, 22 min 表示系統(tǒng)已經(jīng)運(yùn)行1天又22分鐘(uptime -p).
4 users 表示當(dāng)前登錄系統(tǒng)的用戶(w,who).
load average 表示系統(tǒng)負(fù)載,分別是1分鐘,5分鐘,15分鐘前到現(xiàn)在的負(fù)載平均值.
Tasks: 158 total 表示系統(tǒng)的進(jìn)程數(shù)(數(shù)目等于ps -ef|wc -l的值減去2),按大寫H可以切換到線程模式.
running表示正在運(yùn)行的進(jìn)程,sleeping表示睡眠的進(jìn)程,stopped表示暫停的進(jìn)程,zombie表示已結(jié)束但還沒有從進(jìn)程表中刪除的僵尸進(jìn)程.
total表示總內(nèi)存,used表示已經(jīng)使用的內(nèi)存,free表示空閑的內(nèi)存,按E可以切換單位.
buffers(Buffer Cache)表示塊設(shè)備的讀寫緩沖區(qū)占用的內(nèi)存,cached(Page Cache)表示文件系統(tǒng)緩存占用的內(nèi)存.
buffers:塊設(shè)備緩沖 cached:文件系統(tǒng)緩存
如果cached的值很大,說明cache住的文件數(shù)很多.如果頻繁訪問到的文件都能被cache住,那么磁盤的讀I/O就非常小.
所謂塊設(shè)備是指對(duì)其信息的存取以”塊”為單位,如通常的光盤,硬磁盤,軟磁盤,磁帶等,塊長取512字節(jié)或1024字節(jié)或4096字節(jié).
塊設(shè)備可以直接通過塊設(shè)備特別文件來訪問,為了提高數(shù)據(jù)傳輸效率,塊設(shè)備驅(qū)動(dòng)程序內(nèi)部采用塊緩沖技術(shù).
Swap是交換空間,交換空間在物理內(nèi)存(RAM)被充滿時(shí)被使用.
如果系統(tǒng)需要更多的內(nèi)存資源,而物理內(nèi)存已經(jīng)充滿,內(nèi)存中不活躍的頁就會(huì)被移到交換空間去.
雖然交換空間可以為帶有少量內(nèi)存的機(jī)器提供幫助,但是這種方法不應(yīng)該宏茄慶被當(dāng)做是對(duì)內(nèi)存的取蔽握代.
交換空間位于硬盤驅(qū)動(dòng)器上,它比進(jìn)入物理內(nèi)存要慢.
load average的理解:
load average指的是處于task_running或task_uninterruptible狀態(tài)的進(jìn)程(或線程)數(shù)的平均值.
處于task_running狀態(tài)的進(jìn)程(或線程),可能正在使用CPU或排隊(duì)等待使用CPU.
處于task_uninterruptible狀態(tài)的進(jìn)程(或線程),可能正在等待I/O,比如等待磁盤I/O.這時(shí)I/O等待占用的CPU時(shí)間百分比iowait(wa)可能會(huì)比較高.
sudo strace -p `pidof top` 可見top從/proc讀取了很多信息.
man proc 查看 /proc/loadavg 的說明:
man proc | col -b > proc.txt
/proc/loadavg 內(nèi)容:
0.22 0.13 0.14 2/
0.22 0.13 0.14表示在過去的1分鐘,5分鐘,15分鐘,
正在運(yùn)行(task_running)或等待IO(task_uninterruptible)的任務(wù)的數(shù)量.
2/374中的2表示當(dāng)前運(yùn)行的線程數(shù),374則表示系統(tǒng)當(dāng)前存在的內(nèi)核調(diào)度實(shí)體(進(jìn)程/線程)的數(shù)量.
5306是系統(tǒng)最近創(chuàng)建的進(jìn)程PID編號(hào).
又比如:
load average: 31.09, 29.87, 29.92
表示在過去的1分鐘,5分鐘,15分鐘的時(shí)間里,CPU任務(wù)隊(duì)列中平均有30個(gè)程序(這里應(yīng)該是30個(gè)Java線程)在使用CPU.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
root0.227t 0.012tS.:58 java
Java進(jìn)程的CPU使用率%CPU達(dá)到3090%,表示這個(gè)Java進(jìn)程正在使用31個(gè)CPU核心,
這樣對(duì)上了上面load average得出的數(shù)據(jù),也就是有30個(gè)左右的Java線程正在使用30個(gè)CPU核心.
按H(區(qū)分大小寫)切換到線程模式,因?yàn)橐粋€(gè)線程最多只能使用一個(gè)核心,所以線程模式下顯示的CPU使用率不會(huì)超過100%.
當(dāng)CPU和磁盤都忙不過來的時(shí)候,開再多的進(jìn)程也沒有任何意義,只會(huì)徒增CPU上下文切換和磁盤I/O等待,得不償失.
系統(tǒng)負(fù)載高,普遍是因?yàn)橄到y(tǒng)進(jìn)程數(shù)太多,I/O太多導(dǎo)致的.
load average小于1表示系統(tǒng)空閑,大于1表示系統(tǒng)開始繁忙.
Linux服務(wù)器的任務(wù)(進(jìn)程)數(shù)量保持在200個(gè)以下是比較好的,更好不要超過300個(gè).
us, user : time running un-niced user processes 用戶空間進(jìn)程占用CPU時(shí)間百分比
sy, system : time running kernel processes 內(nèi)核進(jìn)程占用CPU時(shí)間百分比
ni, nice : time running niced user processes 用戶空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占用CPU時(shí)間百分比
id, idle : time spent in the kernel idle handler 空閑CPU時(shí)間百分比(100%表示系統(tǒng)完全空閑)
wa, iowait : time waiting for I/O completion I/O等待占用的CPU時(shí)間百分比
hi : time spent servicing hardware interrupts 硬件中斷占用CPU時(shí)間百分比
si : time spent servicing software interrupts 軟件中斷占用CPU時(shí)間百分比
st : time stolen from this vm by the hypervisor 虛擬化hypervisor從當(dāng)前虛擬機(jī)vm偷走的時(shí)間
如果st這個(gè)值很高的話,說明你的VPS提供商的CPU資源有限,而你沒能搶過別人,很有可能就是VPS提供商超售了.
按F選擇要顯示的列和查看每列的含義,默認(rèn)有下面這些列:
PID = Process Id
USER = Effective User Name
PR = Priority PR和NI的值越高越友好即越不競爭資源,比如PR 20和NI 0,另外,PR=NI+20.
NI = Nice Value 負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí),比如kworker的NI為-20,PR為0.
VIRT = Virtual Image (KiB)
RES = Resident Size (KiB) 常駐內(nèi)存,按E切換單位.
SHR = Shared Memory (KiB)
S= Process Status
%CPU = CPU Usage 四核處理器在Tasks模式下滿載為400%,在Threads模式(按H切換)下滿載為100%(一個(gè)線程最多只能使用一個(gè)核心).按Shift+P按CPU使用率排序.
%MEM = Memory Usage (RES) 滿載為100%,按Shift+M按RES內(nèi)存排序.
TIME+ = CPU Time, hundredths 進(jìn)程使用的CPU時(shí)間總計(jì).比如2:32.45代表2分鐘32.45秒.
COMMAND = Command Name/Line
按F進(jìn)入域管理窗口后按A可以切換顯示模式,按空格選中要顯示的列,按S按指定列排序,用向右方向鍵選中列后可以調(diào)整順序.修改后按Shift+W保存設(shè)置到~/.toprc文件.
top里面按Shift+M是按內(nèi)存排序,按E是切換內(nèi)存單位,按Shfit+W保存設(shè)置.
然后執(zhí)行top -n1 -b可以看到按內(nèi)存排序的所有進(jìn)程的信息.
或者ps后用sort排序:
ps aux | sort -k4nr | head -n5
top里按C或者使用-c參數(shù)可以看到進(jìn)程的絕對(duì)路徑和啟動(dòng)參數(shù),就可以得到類似ps -ef和ps aux提供的信息了.
看進(jìn)程路徑: top -p `pidof firefox` -c -n1
看進(jìn)程線程: top -p `pidof firefox` -H -n1
Linux Process Status:
R (task_running) : 可執(zhí)行狀態(tài)
S (task_interruptible): 可中斷的睡眠狀態(tài)
D (task_uninterruptible): 不可中斷的睡眠狀態(tài)
T (task_stopped or task_traced): 暫停狀態(tài)或跟蹤狀態(tài)
Z (task_dead – exit_zombie): 退出狀態(tài),進(jìn)程成為僵尸進(jìn)程
X (task_dead – exit_dead): 退出狀態(tài),進(jìn)程即將被銷毀
running進(jìn)程:
只有在該狀態(tài)的進(jìn)程才可能在CPU上運(yùn)行。
而同一時(shí)刻可能有多個(gè)進(jìn)程處于可執(zhí)行狀態(tài),這些進(jìn)程的task_struct結(jié)構(gòu)(進(jìn)程控制塊)被放入對(duì)應(yīng)CPU的可執(zhí)行隊(duì)列中(一個(gè)進(jìn)程最多只能出現(xiàn)在一個(gè)CPU的可執(zhí)行隊(duì)列中)。
進(jìn)程調(diào)度器的任務(wù)就是從各個(gè)CPU的可執(zhí)行隊(duì)列中分別選擇一個(gè)進(jìn)程在該CPU上運(yùn)行。
很多操作系統(tǒng)教科書將正在CPU上執(zhí)行的進(jìn)程定義為RUNNING狀態(tài)、而將可執(zhí)行但是尚未被調(diào)度執(zhí)行的進(jìn)程定義為READY狀態(tài),這兩種狀態(tài)在Linux下統(tǒng)一為TASK_RUNNING狀態(tài)。
sleeping進(jìn)程:
處于這個(gè)狀態(tài)的進(jìn)程因?yàn)榈却衬呈录陌l(fā)生(比如等待socket連接、等待信號(hào)量),而被掛起。
這些進(jìn)程的task_struct結(jié)構(gòu)被放入對(duì)應(yīng)事件的等待隊(duì)列中。當(dāng)這些事件發(fā)生時(shí)(由外部中斷觸發(fā)、或由其他進(jìn)程觸發(fā)),對(duì)應(yīng)的等待隊(duì)列中的一個(gè)或多個(gè)進(jìn)程將被喚醒。
通過ps命令我們會(huì)看到,一般情況下,進(jìn)程列表中的絕大多數(shù)進(jìn)程都處于task_interruptible狀態(tài)(除非機(jī)器的負(fù)載很高)。
畢竟CPU就這么一兩個(gè),進(jìn)程動(dòng)輒幾十上百個(gè),如果不是絕大多數(shù)進(jìn)程都在睡眠,CPU又怎么響應(yīng)得過來。
stopped進(jìn)程:
向進(jìn)程發(fā)送一個(gè)sigstop信號(hào),它就會(huì)因響應(yīng)該信號(hào)而進(jìn)入task_stopped狀態(tài),除非該進(jìn)程本身處于task_uninterruptible狀態(tài)而不響應(yīng)信號(hào)。
sigstop與sigkill信號(hào)一樣,是非常強(qiáng)制的。不允許用戶進(jìn)程通過signal系列的系統(tǒng)調(diào)用重新設(shè)置對(duì)應(yīng)的信號(hào)處理函數(shù)。
向進(jìn)程發(fā)送一個(gè)sigcont信號(hào),可以讓其從task_stopped狀態(tài)恢復(fù)到task_running狀態(tài)。
當(dāng)進(jìn)程正在被跟蹤時(shí),它處于task_traced這個(gè)特殊的狀態(tài)?!罢诒桓櫋敝傅氖沁M(jìn)程暫停下來,等待跟蹤它的進(jìn)程對(duì)它進(jìn)行操作。
比如在gdb中對(duì)被跟蹤的進(jìn)程下一個(gè)斷點(diǎn),進(jìn)程在斷點(diǎn)處停下來的時(shí)候就處于task_traced狀態(tài)。而在其他時(shí)候,被跟蹤的進(jìn)程還是處于前面提到的那些狀態(tài)。
對(duì)于進(jìn)程本身來說,task_stopped和task_traced狀態(tài)很類似,都是表示進(jìn)程暫停下來。
而task_traced狀態(tài)相當(dāng)于在task_stopped之上多了一層保護(hù),處于task_traced狀態(tài)的進(jìn)程不能響應(yīng)sigcont信號(hào)而被喚醒。
只能等到調(diào)試進(jìn)程通過ptrace系統(tǒng)調(diào)用執(zhí)行ptrace_cont、ptrace_detach等操作(通過ptrace系統(tǒng)調(diào)用的參數(shù)指定操作),或調(diào)試進(jìn)程退出,被調(diào)試的進(jìn)程才能恢復(fù)task_running狀態(tài)。
zombie進(jìn)程:
在Linux進(jìn)程的狀態(tài)中,僵尸進(jìn)程是非常特殊的一種,它是已經(jīng)結(jié)束了的進(jìn)程,但是沒有從進(jìn)程表中刪除。
太多了會(huì)導(dǎo)致進(jìn)程表里面條目滿了,進(jìn)而導(dǎo)致系統(tǒng)崩潰,倒是不占用其他系統(tǒng)資源。
它已經(jīng)放棄了幾乎所有內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,
僅僅在進(jìn)程列表中保留一個(gè)位置,記載該進(jìn)程的退出狀態(tài)等信息供其他進(jìn)程收集,除此之外,僵尸進(jìn)程不再占有任何內(nèi)存空間。
進(jìn)程在退出的過程中,處于TASK_DEAD狀態(tài)。在這個(gè)退出過程中,進(jìn)程占有的所有資源將被回收,除了task_struct結(jié)構(gòu)(以及少數(shù)資源)以外。
于是進(jìn)程就只剩下task_struct這么個(gè)空殼,故稱為僵尸。
之所以保留task_struct,是因?yàn)閠ask_struct里面保存了進(jìn)程的退出碼、以及一些統(tǒng)計(jì)信息。
而其父進(jìn)程很可能會(huì)關(guān)心這些信息。比如在shell中,$?變量就保存了最后一個(gè)退出的前臺(tái)進(jìn)程的退出碼,而這個(gè)退出碼往往被作為if語句的判斷條件。
當(dāng)然,內(nèi)核也可以將這些信息保存在別的地方,而將task_struct結(jié)構(gòu)釋放掉,以節(jié)省一些空間。
但是使用task_struct結(jié)構(gòu)更為方便,因?yàn)樵趦?nèi)核中已經(jīng)建立了從pid到task_struct查找關(guān)系,還有進(jìn)程間的父子關(guān)系。
釋放掉task_struct,則需要建立一些新的數(shù)據(jù)結(jié)構(gòu),以便讓父進(jìn)程找到它的子進(jìn)程的退出信息。
子進(jìn)程在退出的過程中,內(nèi)核會(huì)給其父進(jìn)程發(fā)送一個(gè)信號(hào),通知父進(jìn)程來“收尸”。
父進(jìn)程可以通過wait系列的系統(tǒng)調(diào)用(如wait4、waitid)來等待某個(gè)或某些子進(jìn)程的退出,并獲取它的退出信息。
然后wait系列的系統(tǒng)調(diào)用會(huì)順便將子進(jìn)程的尸體(task_struct)也釋放掉。
這個(gè)信號(hào)默認(rèn)是SIGCHLD,但是在通過clone系統(tǒng)調(diào)用創(chuàng)建子進(jìn)程時(shí),可以設(shè)置這個(gè)信號(hào)。
如果他的父進(jìn)程沒安裝SIGCHLD信號(hào)處理函數(shù)調(diào)用wait或waitpid()等待子進(jìn)程結(jié)束,又沒有顯式忽略該信號(hào),那么它就一直保持僵尸狀態(tài),子進(jìn)程的尸體(task_struct)也就無法釋放掉。
如果這時(shí)父進(jìn)程結(jié)束了,那么init進(jìn)程自動(dòng)會(huì)接手這個(gè)子進(jìn)程,為它收尸,它還是能被清除的。
但是如果如果父進(jìn)程是一個(gè)循環(huán),不會(huì)結(jié)束,那么子進(jìn)程就會(huì)一直保持僵尸狀態(tài),這就是為什么系統(tǒng)中有時(shí)會(huì)有很多的僵尸進(jìn)程。
當(dāng)進(jìn)程退出的時(shí)候,會(huì)將它的所有子進(jìn)程都托管給別的進(jìn)程(使之成為別的進(jìn)程的子進(jìn)程)。
托管的進(jìn)程可能是退出進(jìn)程所在進(jìn)程組的下一個(gè)進(jìn)程(如果存在的話),或者是1號(hào)進(jìn)程。
所以每個(gè)進(jìn)程、每時(shí)每刻都有父進(jìn)程存在。除非它是1號(hào)進(jìn)程。1號(hào)進(jìn)程,pid為1的進(jìn)程,又稱init進(jìn)程。
Linux系統(tǒng)啟動(dòng)后,之一個(gè)被創(chuàng)建的用戶態(tài)進(jìn)程就是init進(jìn)程。它有兩項(xiàng)使命:
1、執(zhí)行系統(tǒng)初始化腳本,創(chuàng)建一系列的進(jìn)程(它們都是init進(jìn)程的子孫);
2、在一個(gè)死循環(huán)中等待其子進(jìn)程的退出事件,并調(diào)用waitid系統(tǒng)調(diào)用來完成“收尸”工作;
init進(jìn)程不會(huì)被暫停、也不會(huì)被殺死(這是由內(nèi)核來保證的)。它在等待子進(jìn)程退出的過程中處于task_interruptible狀態(tài),“收尸”過程中則處于task_running狀態(tài)。
關(guān)于linux top命令參數(shù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),1500元定制網(wǎng)站優(yōu)化全包,先排名后付費(fèi),已為上千家服務(wù),聯(lián)系電話:13518219792
本文名稱:LinuxTop命令參數(shù)解析,提高系統(tǒng)管理效率(linuxtop命令參數(shù))
URL網(wǎng)址:http://m.5511xx.com/article/djescjh.html


咨詢
建站咨詢
