12.4 Linux實時監聽進程運行狀態(top命令)

      網友投稿 859 2022-05-30

      ps 命令可以一次性給出當前系統中進程狀態,但使用此方式得到的信息缺乏時效性,并且,如果管理員需要實時監控進程運行情況,就必須不停地執行 ps 命令,這顯然是缺乏效率的。

      為此,linux 提供了 top 命令。top 命令可以動態地持續監聽進程地運行狀態,與此同時,該命令還提供了一個交互界面,用戶可以根據需要,人性化地定制自己的輸出,進而更清楚地了進程的運行狀態。

      top 命令的基本格式如下:

      [root@localhost ~]#top [選項]

      選項:

      -d 秒數:指定 top 命令每隔幾秒更新。默認是 3 秒;

      -b:使用批處理模式輸出。一般和"-n"選項合用,用于把 top 命令重定向到文件中;

      -n 次數:指定 top 命令執行的次數。一般和"-"選項合用;

      -p 進程PID:僅查看指定 ID 的進程;

      -s:使 top 命令在安全模式中運行,避免在交互模式中出現錯誤;

      -u 用戶名:只監聽某個用戶的進程;

      在 top 命令的顯示窗口中,還可以使用如下按鍵,進行一下交互操作:

      ? 或 h:顯示交互模式的幫助;

      P:按照 CPU 的使用率排序,默認就是此選項;

      M:按照內存的使用率排序;

      N:按照 PID 排序;

      T:按照 CPU 的累積運算時間排序,也就是按照 TIME+ 項排序;

      k:按照 PID 給予某個進程一個信號。一般用于中止某個進程,信號 9 是強制中止的信號;

      r:按照 PID 給某個進程重設優先級(Nice)值;

      q:退出 top 命令;

      我們看看 top 命令的執行結果,如下:

      [root@localhost ~]# top top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 625344k total, 571504k used, 53840k free, 65800k buffers Swap: 524280k total, 0k used, 524280k free, 409280k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19002 root 20 0 2656 1068 856 R 0.3 0.2 0:01.87 top 1 root 20 0 2872 1416 1200 S 0.0 0.2 0:02.55 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 6 root RT 0 0 0 0 S 0.0 0.0 0:10.01 watchdog/0 7 root 20 0 0 0 0 S 0.0 0.0 0:05.01 events/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper 10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns 11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm 13 root 20 0 0 0 0 S 0.0 0.0 0:01.70 sync_supers 14 root 20 0 0 0 0 S 0.0 0.0 0:00.63 bdi-default 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kintegrityd/0 16 root 20 0 0 0 0 S 0.0 0.0 0:02.52 kblockd/0 17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpid 18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kacpi_notify

      我們解釋一下命令的輸出。top 命令的輸出內容是動態的,默認每隔 3 秒刷新一次。命令的輸出主要分為兩部分:

      第一部分是前五行,顯示的是整個系統的資源使用狀況,我們就是通過這些輸出來判斷服務器的資源使用狀態的;

      第二部分從第六行開始,顯示的是系統中進程的信息;

      我們先來說明第一部分的作用。

      第一行為任務隊列信息,具體內容如表 1 所示。

      第二行為進程信息,具體內容如表 2 所示。

      第三行為 CPU 信息,具體內容如表 3 所示。

      第四行為物理內存信息,具體內容如表 4 所示。

      12.4 Linux實時監聽進程運行狀態(top命令)

      第五行為交換分區(swap)信息,如表 5 所示。

      我們通過 top 命令的第一部分就可以判斷服務器的健康狀態。如果 1 分鐘、5 分鐘、15 分鐘的平均負載高于 1,則證明系統壓力較大。如果 CPU 的使用率過高或空閑率過低,則證明系統壓力較大。如果物理內存的空閑內存過小,則也證明系統壓力較大。

      這時,我們就應該判斷是什么進程占用了系統資源。如果是不必要的進程,就應該結束這些進程;如果是必需進程,那么我們該増加服務器資源(比如増加虛擬機內存),或者建立集群服務器。

      我們還要解釋一下緩沖(buffer)和緩存(cache)的區別:

      緩存(cache)是在讀取硬盤中的數據時,把最常用的數據保存在內存的緩存區中,再次讀取該數據時,就不去硬盤中讀取了,而在緩存中讀取。

      緩沖(buffer)是在向硬盤寫入數據時,先把數據放入緩沖區,然后再一起向硬盤寫入,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。

      簡單來說,緩存(cache)是用來加速數據從硬盤中"讀取"的,而緩沖(buffer)是用來加速數據"寫入"硬盤的。

      再來看 top 命令的第二部分輸出,主要是系統進程信息,各個字段的含義如下:

      PID:進程的 ID。

      USER:該進程所屬的用戶。

      PR:優先級,數值越小優先級越高。

      NI:優先級,數值越小、優先級越高。

      VIRT:該進程使用的虛擬內存的大小,單位為 KB。

      RES:該進程使用的物理內存的大小,單位為 KB。

      SHR:共享內存大小,單位為 KB。

      S:進程狀態。

      %CPU:該進程占用 CPU 的百分比。

      %MEM:該進程占用內存的百分比。

      TIME+:該進程共占用的 CPU 時間。

      COMMAND:進程的命令名。

      這部分和 ps 命令的輸出比較類似,只是如果在終端執行 top 命令,則不能看到所有的進程,而只能看到占比靠前的進程。接下來我們舉幾個 top 命令常用的實例。

      【例 1】如果只想讓 top 命令查看某個進程,就可以使用 “-p 選項”。命令如下:

      [root@localhost ~]# top -p 15273 #只查看 PID為 15273的apache進程 top - 14:28:47 up 1 day, 15:34, 3 users, load average: 0.00,0.00,0.00 Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 625344k total, 574124k used, 51220k free, 67024k buffers Swap: 524280k total, Ok used, 524280k free, 409344k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 580 S 0.0 0.2 0:00.00 httpd

      【例 2】top 命令如果不正確退出,則會持續運行。在 top 命令的交互界面中按 “q” 鍵會退出 top 命令;也可以按 “?” 或 “h” 鍵得到 top 命令交互界面的幫助信息;還可以按鍵中止某個進程。比如:

      [root@localhost ~]# top top - 14:10:15 up 1 day, 15:15, 3 users, load average: 0.00,0.00, 0.00 Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 625344k total, 574248k used, 51096k free, 66840k buffers Swap: 524280k total, Ok used, 524280k free, 409324k cached PID to kill:15273 #按"k"鍵,會提示輸入要殺死進程的PID PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 580 S 0.0 0.2 0:00.00 httpd ..省略部分輸出...

      【例 3】輸入要中止進程的 PID,比如要中止 15273 這個 apache 進程,命令如下:

      top - 14:11:42 up 1 day, 15:17, 3 users, load average: 0.00,0.00, 0.00 Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 625344k total, 574248k used, 51096k free, 66856k buffers Swap: 524280k total, 0k used, 524280k free, 409324k cached Kill PID 15273 with signal [15]:9 #提示輸入信號,信號9代表強制中止 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 15273 daemon 20 0 4520 1192 580 S 0.0 0.2 0:00.00 httpd …省略部分輸出…

      接下來 top 命令提示我們輸入信號,信號 9 代表強制中止,這時就能夠強制中止 15273 進程了。

      【例 4】如果要改變某個進程的優先級,就要利用 “r” 交互命令。需要注意的是,我們能夠修改的只有 Nice 的優先級,而不能修改 Priority 的優先級。具體修改命令如下:

      [root@localhost ~]# top -p 18977 top - 14:17:09 up 1 day, 15:22, 3 users, load average: 0.00,0.00, 0.00 Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 625344k total, 574124k used, 51220k free, 66896k buffers Swap: 524280k total, 0k used, 524280k free, 409324k cached PID to renice: #輸入"r"交互命令之后,提示輸入要修改優先級的進程的PID PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 18977 root 20 0 11592 3304 2572 S 0.0 0.5 0:04.37 sshd

      輸入 “r” 交互命令,會提示輸入需要修改優先級的進程的 PID。例如,我們想要修改 18977 這個 sshd 遠程連接進程的優先級,就輸入該進程的 PID。命令如下:

      Renice PID 18977 to value: 10 #輸入PID后,需要輸入Nice的優先級號 #我們把18977進程的優先級調整為10,回車后就能看到 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 18977 root 30 10 11592 3304 2572 R 0.0 0.5 0:04.38 sshd #18977進程的優先級已經被修改了

      【例 5】如果在操作終端執行 top 命令,則并不能看到系統中所有的進程,默認看到的只是 CPU 占比靠前的進程。如果我們想要看到所有的進程,則可以把 top 命令的執行結果重定向到文件中。不過 top 命令是持續運行的,這時就需要使用 “-b” 和 “-n” 選項了。具體命令如下:

      [root@localhost ~]# top -b -n 1 > /root/top.log \#讓top命令只執行一次,然后把執行結果保存到top.log文件中,這樣就能看到所有的進程了

      Linux 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【讀書會第十二期】動畫圖解核心內存區--堆
      下一篇:excel表格生成圖片的方法步驟圖
      相關文章
      久久夜色精品国产嚕嚕亚洲av| 亚洲女人被黑人巨大进入| 国产性爱在线观看亚洲黄色一级片 | 亚洲精品无码专区2| 无码亚洲成a人在线观看| 日韩亚洲国产综合高清| 精品国产日韩久久亚洲| 亚洲日本人成中文字幕| 亚洲一欧洲中文字幕在线| 亚洲成年人电影在线观看| 亚洲色偷偷av男人的天堂| 4480yy私人影院亚洲| 亚洲精品午夜在线观看| 91嫩草亚洲精品| 亚洲毛片基地4455ww| 亚洲综合av一区二区三区| 亚洲午夜无码久久久久软件| 亚洲色无码专区一区| 亚洲国产精华液2020| 日本系列1页亚洲系列| 亚洲国产精品尤物yw在线| 久久久久噜噜噜亚洲熟女综合| 亚洲综合国产精品第一页| 亚洲精品国产精品乱码不99| 亚洲V无码一区二区三区四区观看| 久久亚洲精品中文字幕无码| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲精品中文字幕| 亚洲女人初试黑人巨高清| 国产精品亚洲精品| 亚洲国产成人精品无码区花野真一 | 亚洲最大福利视频网站| 亚洲精品午夜在线观看| 国产成人精品亚洲日本在线| 亚洲爆乳大丰满无码专区| 亚洲乱码国产一区网址| 亚洲αv久久久噜噜噜噜噜| 亚洲成综合人影院在院播放| 中文字幕亚洲情99在线| 国产精品亚洲专区无码牛牛| 亚洲日韩在线中文字幕第一页|