Linux程序管理完全指南:從ps到htop,掌握關鍵命令

Linux系統程序管理

概念
  • 程序監控指令之ps
    • 語法
    • ps -aux解析
  • 程序狀態
    • 常用程序基礎狀態
    • 常用組合程序狀態
    • 殭屍狀態的程序
    • 孤兒程序
  • 程序監控指令之top、htop、iotop
    • top
    • htop
    • iotop

概念

在 Linux 系統中,程序是正在執行的程式的例項。理解程序的管理、檢視和控制對於系統管理員和開發者來說非常重要
程序的定義:
  • • 程序(Process)是程式在執行時的一個例項。它包含了程式的程式碼、資料、堆疊、環境變數等。
  • • 每個程序都有一個唯一的 程序 ID(PID),用於標識程序。
  • • 程序可以處於不同的狀態,如執行態、就緒態、等待態、殭屍態等。

程序監控指令之ps

ps命令用於報告當前系統的程序狀態。可以搭配kill指令隨時中斷、刪除不必要的程式。ps命令是最基本同時也是非常強大的程序檢視命令,使用該命令可以確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有僵死、哪些程序佔用了過多的資源等等,總之大部分資訊都是可以透過執行該命令得到的.

語法

|     |     || --- | --- ||     | ps [選項] |
常用選項說明
  • • -a:顯示所有使用者的程序(不包括會話領導者和沒有控制終端的程序)。
  • • -u:顯示程序的使用者資訊。
  • • -x:顯示沒有控制終端的程序。
  • • -e:顯示所有程序。
  • • -f:顯示長格式資訊,包括父程序 ID、控制終端等。
  • • -l:顯示長格式資訊,類似於 -f,但更詳細。
  • • -o:自定義輸出格式,指定要顯示的欄位。
  • • -p:指定要顯示的程序 ID。
  • • -t:指定要顯示的終端。
  • • -U:指定要顯示的使用者。
  • • -G:指定要顯示的使用者組。
常用搭配
|     |     |--- | --- ||     | ps-ef ||     | ps-aux ||     | ps-le |

ps -aux解析

|     |     || --- | --- ||     | root@master-01:~# ps -aux \| head -10 ||     | USER         PID %CPU%MEM    VSZ   RSS TTY      STAT START   TIME COMMAND ||     | root           10.40.017085611472 ?        Ss   Feb17 350:48 /sbin/init nopti ||     | root           20.00.000 ?        S    Feb17   0:13 [kthreadd] ||     | root           30.00.000 ?        I<   Feb17   0:00 [rcu_gp] ||     | root           40.00.000 ?        I<   Feb17   0:00 [rcu_par_gp] ||     | root           60.00.000 ?        I<   Feb17   0:00 [kworker/0:0H-kblockd] ||     | root           80.00.000 ?        I<   Feb17   0:00 [mm_percpu_wq] ||     | root           90.00.000 ?        S    Feb17   2:29 [ksoftirqd/0] ||     | root          100.00.000 ?        I    Feb17  53:47 [rcu_sched] ||     | root          110.00.000 ?        S    Feb17   0:08 [migration/0] ||     |     ||     | #解析 ||     | USER:表示使用者 ||     | PID:表示程序號 ||     | %CPU:表示cpu佔用率 ||     | %MEM:表示記憶體佔用率 ||     | VSZ:程序佔用的虛擬記憶體,單位kb ||     | RSS:程序佔用的常駐記憶體,單位kb ||     | TTY:?表示程序沒有控制終端 ||     | STAT:程序狀態 ||     | START:程序啟動時間 ||     | TIME:程序累計運行了多長時間 ||     | COMMAND:程序執行的命令 |

程序狀態

常用程序基礎狀態

  • • 執行態(Running):狀態字元R。程序正在CPU上執行,或者在執行佇列中等待執行
  • • 睡眠態(Sleeping):狀態字元S。程序正在等待某些事件(如 I/O 操作、訊號等)完成。程序處於睡眠態時,不會佔用 CPU 時間。
  • • 不可中斷睡眠態(Disk Sleep):狀態字元D。程序正在等待某些不可中斷的 I/O 操作完成,通常與磁碟 I/O 操作有關。處於這種狀態的程序不能被訊號喚醒,也不能被 kill 命令終止。
  • • 停止態(Stopped):狀態字元T。程序被訊號停止,通常是因為收到了 SIGSTOP 或 SIGTSTP 訊號。停止的程序不會佔用 CPU 時間,但可以被訊號喚醒。
  • • 殭屍程序(Zombie):狀態字元Z。程序已經完成,但其父程序尚未讀取其狀態資訊。殭屍程序不能被終止,只能等待父程序讀取狀態資訊後自動消失。殭屍程序會佔用系統資源,直到父程序讀取其狀態資訊。
  • • 死態(Dead):狀態字元X。程序已經死亡,但尚未被父程序回收。這種狀態的程序通常不會出現在 ps 的輸出中。

常用組合程序狀態

  • • R+、S+、D+:帶+號的程序,表示程序前臺執行
  • • Ss、xxxs:帶小s的程序,程序是父程序
  • • R<、S<:帶小於號<的程序,程序是高優先順序程序,優先被cpu排程
  • • RN、SN:帶N的程序,程序是低優先順序程序
  • • Sl:帶l的執行緒,程序是多執行緒狀態

殭屍狀態的程序

這裡著重講一下殭屍狀態的程序,殭屍狀態的程序因為一些原因脫離系統控制,但是程序又沒有正常退出(結束),程序執行中但是不受控制,佔用系統的cpu、記憶體資源。

殭屍狀態排查及結束流程

  1. 1. 使用ps命令查詢殭屍程序
|     |     || --- | --- ||     | ps -ef \| grep'Z' ||     | # 或者使用更詳細的命令來定位殭屍程序及其父程序,在輸出中,STAT 列為 Z 的程序即為殭屍程序 ||     | ps -A -ostat,ppid,pid,cmd \| grep -e '^\[Zz\]' |
  1. 2. 定位殭屍程序的父程序
|     |     |--- | --- ||     | # 下面命令輸出的是殭屍程序的父程序PID ||     | ps-o ppid= -p <殭屍程序PID> |
  1. 3. 終止父程序
|     |     || --- | --- ||     | # 父程序終止後,殭屍程序會被 init 程序(PID 1)接管並自動清理 ||     | kill -9 父程序pid |

孤兒程序

對系統影響不大。某個子程序的父程序因為特殊原因掛了,但是子程序還在,子程序就是孤兒程序。

程序監控指令之tophtopiotop

top

top命令可以動態的持續監聽程序的執行狀態,與此同時,該命令還提供了一個互動介面,使用者可以根據需要,人性化的定製自己的輸出,進而更清楚的瞭解程序的執行狀態

語法

|     |     || --- | --- ||     | top[選項] |
常用選項說明
  • • -d:指定top命令每隔幾秒更新,預設是3秒
  • • -b:使用批處理模式,一般和-n選項結合使用,用於把top命令重定向到檔案中
  • • -p:僅檢視指定ID的程序
  • • -u:只監聽某個使用者的程序
示例:
||||---|---|||root@master-01:~#top|||top-17:01:55up60days,6:30,1user,load average:2.55,1.74,1.88|||Tasks:473total,1running,472sleeping,0stopped,0zombie|||%Cpu(s):0.2us,0.4sy,0.0ni,99.4id,0.0wa,0.0hi,0.0si,0.0st|||MiB Mem :64050.7total,29284.5free,6963.5 used,27802.7buff/cache|||MiB Swap:0.0total,0.0free,0.0used.55773.2availMem||||||PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND|||1280024root2009440   4136   3056 R6.20.00:00.01top|||1root200170856114726800 S0.00.0350:51.46systemd|||2root200000S0.00.00:13.76kthreadd|||3root0-20000I0.00.00:00.00rcu_gp|||4root0-20000I0.00.00:00.01rcu_par_gp|||6root0-20000I0.00.00:00.00kworker/0:0H-kblockd|||8root0-20000I0.00.00:00.00mm_percpu_wq|||9root200000S0.00.02:29.50ksoftirqd/0|||10root200000I0.00.053:48.12rcu_sched|

說明圖:

image

htop

htop 是一個互動式的程序檢視器,類似於 top,但提供了更豐富的功能和更友好的使用者介面。它支援顏色顯示、樹狀結構、程序排序等功能,還可以直接在介面中操作程序(如殺死程序)。

安裝

|     ||| --- | --- ||     | 在大多數 Linux 發行版中,htop 可以透過包管理器安裝: ||| bash ||     | 複製  ||| # Ubuntu/Debian ||     | sudo apt-get install htop |||     ||     |# CentOS/RHEL ||     | sudo yum install htop |||     ||     |# Fedora ||     | sudo dnf install htop |

執行htop後,你會看到類似以下的介面:

image
常用快捷鍵
  • • F1:幫助
  • • F2:設定
  • • F3:搜尋程序
  • • F4:過濾程序
  • • F5:樹狀檢視
  • • F6:排序欄位
  • • F9:殺死程序
  • • F10:退出

iotop

iotop是一個用於監控磁碟 I/O 活動的工具,可以幫助你瞭解哪些程序正在佔用磁碟 I/O 資源。它提供了即時的 I/O 使用情況,包括讀寫速度、程序資訊等。

安裝

|     ||| --- | --- ||     |# Ubuntu/Debian ||     | sudo apt-get install iotop |||     ||     |# CentOS/RHEL ||     | sudo yum install iotop |||     ||     |# Fedora ||     | sudo dnf install iotop |

執行iotop後,你會看到類似以下的介面:

image
連結:https://www.cnblogs.com/huangSir-devops/p/18834292
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
備註:最新運維資料
100%免費領取
(後臺不再回復,掃碼一鍵領取


相關文章