linux檢視程序例項詳解
檢視程序 ps (重要) Process State 是非常強大的程序檢視命令,用於報告當前系統的程序狀態。
常用選項: 1、BSD風格 a——和終端有關的程序 x——和終端無關的程序 u——顯示程序的執行者 2、sys V風格 -e——檢視所有程序 -l——long,長格式 -f——full,詳細資訊 -o——指定輸出格式
常用命令 ps #檢視隸屬於自己的程序
ps -l(ps -u)#僅檢視隸屬於自己程序的詳細資訊
[[email protected] ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1703 1698 0 80 0 - 27104 wait pts/0 00:00:00 bash 4 R 0 1779 1703 0 80 0 - 27035 - pts/0 00:00:00 ps 1 2 3 4 F 程序標誌 4 此程序的許可權為root 1 此程序僅可進行復制(fork)而無法被執行(exec)
S 程序狀態 R:該程序正在執行中 S:該程序目前正在睡眠狀態(idle),但可以被喚醒(signal) #程序睡眠並不代表該程序未開啟; D: 不可被喚醒的睡眠狀態,通常這個程序可能在等待I/O的情況(ex>列印) T:停止狀態,stop,可能是在工作控制(後臺暫停)或除錯(traced)狀態 Z:“殭屍”狀態,程序已經終止但卻無法被刪除至記憶體外
UID、PID、PPID 該程序是root使用者(UID為0一般為root)的1730程序(UID),此程序的父程序為1698(PPID);
C CPU利用率,單位為百分比;
PRI/NI 此程序被CPU執行的優先順序(後續會詳解);
ADDR、SZ、WCHAN 都與記憶體有關;ADDR表示該程序在記憶體的哪個部分,running的程序顯示-,SZ表示此程序用掉多少記憶體,WCHAN表示目前程序是否在執行中,running顯示-
ps aux(ps -le) #檢視所有使用者執行的過程的詳細資訊
[[email protected] ~]# ps -aux | head -n 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19360 1528 ? Ss 19:13 0:03 /sbin/init root 2 0.0 0.0 0 0 ? S 19:13 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 19:13 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S 19:13 0:00 [ksoftirqd/0] 1 2 3 4 5 6 user:程序執行者;
PID:程序的ID;
%CPU:程序CPU佔用率;
%MEM:程序記憶體佔用率;
VSZ:該程序使用掉的虛擬記憶體大小(kb);
RSS:該程序佔用的真實記憶體大小;
TTY:是否終端有關;
STAT:程序狀態;
START:程序啟動時間;
TIME:程序佔用CPU的總時長;
COMMAND:程序名 【COMMAND】代表的是核心程序的一個執行緒
ps -o pid,comm,ni 指定程序按PID、COMMAND、NICE的格式輸出
列出佔用CPU最多的5個程序,並按從大到小進行排序
[[email protected] ~]# ps -eo comm,pcpu --sort -pcpu | head -n 5 COMMAND %CPU events/0 0.2 init 0.0 kthreadd 0.0 migration/0 0.0 1 2 3 4 5 6 pcpu:cpu使用率的百分比; 可直接在後面接–sort進行排序;
和kill搭配 用於隨時終端、刪除不必要的程式
例:尋找並殺死殭屍程序
top | head -n 2 #檢視伺服器是否有殭屍程序,若zombie>0則有;(見top詳解) ps -efo stat,ppid,pid,cmd | grep -e ‘^[Zz]’ #尋找殭屍程序 Z 12348 12344 /path/cmd kill -15 12348 #給程序傳送signal,殺死這個殭屍程序 ps -efo stat,ppid,pid,cmd | grep -e ‘^[Zz]’ #確認該殭屍程序已被殺死 若未被殺死,可以通過以下方法解決: kill -15 12344 #殺死其父程序 kill -9 12348 #強制殺死 killall/pkill P_name #通過程序名殺死程序 小結:使用ps命令可確定有哪些程序正在執行和執行的狀態、程序是否結束、程序有沒有殭屍、哪些程序佔用率過多的資源等等,總之大部分資訊都是可以通過執行該命令得到的
top top是一個互動式系統性能監控工具,不同於ps是靜態的結果輸出,top可以實時動態地檢視系統的整體執行情況。 通過top命令所提供的互動式介面,用熱鍵可以管理。 #這個互動介面,類似工作管理員
load average:系統負載對於單個處理器來說,負載在0-1.00之間是正常的,超過1.00就要引起注意了,系統已經超載了,我理解為塞車了。在多核處理器中,你的系統均值不應該高於處理器核心的總數(多個1*CPU核數),還可以通過uptime檢視系統負載;
%us:使用者空間佔用CPU百分比,此值較高時,表示程序消耗CPU時間多,如果長期超過50%的時候,我們就要考慮優化程式演算法或者進行加速;
%sy:核心空間佔用CPU百分比,此值較高時,表示系統核心消耗CPU資源多,我們應該檢查原因;
%wa:等待輸入輸出的CPU時間百分比,此值較高時,說明IO等待驗證,這可能是由於磁碟大量隨機訪問造成,也可能造成磁碟出現瓶頸(塊操作);
%id:反映了CPU繁忙程度;
buffers和cached區別瞭解一下:buffer是塊裝置的讀寫快取區,cached是檔案系統本身的頁面快取,它們都是linux作業系統底層的機制,目的是加速對磁碟的訪問;
PR和NI:系統優先順序有2種,一種是不能被使用者更改,由系統控制的priority;一種是nice值,可以被使用者修改(使用renice命令),範圍-20~+19,越小越優先;
小結
RT代表實時,real time,最高優先順序 每隔3s刷清一次,-b改變時間;T、M、P 按鍵盤
pstree linux系統中,每一個程序都是由其父程序建立的, 此命令以樹狀圖的方式展現程序間的派生關係。
常用命令 pstree -p 顯示當前所有程序的程序號和程序id
[[email protected] ~]# pstree -p init(1)─┬─NetworkManager(1407) ├─auditd(1336)───{auditd}(1337) ├─crond(1668) ├─cupsd(1441) ├─dbus-daemon(1393)───{dbus-daemon}(1396) ├─dmeventd(1097)─┬─{dmeventd}(1098) │ └─{dmeventd}(1099) ├─master(1654)─┬─pickup(1780) │ └─qmgr(1664) ├─mingetty(1681) ├─mingetty(1683) 1 2 3 4 5 6 7 8 9 10 11 12 由上可知,所有的程序都是依附在init這個程序下面,且id(init)=1,是由init核心主動呼叫的第一個程序;
systmd是Rehat7以上版本新的service,作用是載入服務,也是紅帽啟動的第一個程序
pgrep 通過程序名與其他屬性來查詢程序,並顯示查詢到的程序id
常用選項 -l ——顯示程序名
引數 程序名稱:指定要查詢的程序名稱,同時也支援類似grep指令中的匹配模式
[[email protected] ~]# pgrep -l sshd 1569 sshd 1824 sshd 1 2 3 pstree -a 顯示程序的所有詳細資訊,遇到相同的程序名可以壓縮展示
[[email protected] ~]# pstree -a init ├─NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid ├─auditd │ └─{auditd} ├─crond ├─cupsd -C /etc/cups/cupsd.conf ├─dbus-daemon --system │ └─{dbus-daemon} ├─dmeventd │ ├─{dmeventd} │ └─{dmeventd} ├─master │ ├─pickup -l -t fifo -u │ └─qmgr -l -t fifo -u ├─mingetty /dev/tty1 ├─mingetty /dev/tty2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 如果子程序掛掉或者老是殺不掉子程序,則可用pstree來找到父程序殺掉;
寫在最後的話 本人只是一個在linux學習大軍中搬磚的小小的一員,技術水平有限,文中難免出現不妥或者錯訛,歡迎大家在評論區多多指正,共同進步,不盡感激! --------------------- 作者:不要跟我搶雞腿 來源:CSDN 原文:https://blog.csdn.net/wsxxdwwzjdy/article/details/78507698 版權宣告:本文為博主原創文章,轉載請附上博文連結!