1. 程式人生 > >Linux 中ps 和 top命令詳解

Linux 中ps 和 top命令詳解

ps 和 top 命令常用來檢視Linux系統程序相關資訊。

ps命令:可以檢視程序的瞬間資訊。

top命令:可以持續的監視程序的資訊。

場景一:如何檢視Linux系統中存在mysql、nginx、tomcat程序?

方法一:輸入命令:ps -ef|grep 相應的程序名稱

輸入命令: ps -ef

效果如下:

上述紅色框住的引數含義如下:

UID:使用者ID,實際輸出的是使用者名稱,如root

PID:當前程序的ID

PPID:當前程序的父程序ID

C:當前程序佔用的CPU的百分比

STIME:當前程序啟動到現在的時間

TTY:當前程序在哪個終端上執行,若與程序無關,則顯示為?,若為pts/0等,則表示由網路連線主機程序。

CMD:命令的名稱和引數

關於PID和PPID,我們來看個栗子,如下:

當我們執行:ps-ef 命令之後,看到如下關係圖:

可以看到ps -ef這個命令的程序PID為5004,而其父程序號PPID為4945,該4945程序號對應的程序命令為-bash,即表明ps -ef命令是執行在-bash這個shell上,而PID為4945對應的父程序號PPID為4893,該程序是4893,這個程序的命令是sshd,即我們表明我們是通過shell登入進來的,再看PID為1881對應的父程序PPID為1,是命令/sbin/init,這是Linux啟動之後第一個被載入的程序。衍生知識點:如果我們是在物理主機上執行ps -ef,追根溯源過程中,一定不會有sshd相關的命令

那麼,我們如果想看下是否在ps -ef中輸出的命令中是否有mysql相關的行,只需要用grep 來捕獲mysql關鍵字即可,即輸入命令:ps -ef|grep mysql

效果如下:

注意:上圖中用紅色框圈出的問號,表明當前程序與終端執行無關。此時,我們可以判斷既然與終端無關,那就是該命令是由Linux系統首次啟動時啟動的,而不是通過某個具體的終端。測試例子如下:

首先,在某個終端(可能是pts或者tty)關閉mysql,輸入命令:service mysqld stop,然後執行命令:service mysqld start,此時,再執行命令:ps -ef|grep mysql,效果如下:

這裡,顯示了具體終端的型別。

總結:通過TTY的型別,可以知道該程序是否由系統啟動時執行的。

方法二:輸入命令:ps aux | grep 相應的程序名稱

比如:查詢是否存在MySQL程序,輸入:ps aux|grep mysql,效果如下:

其中各個引數的含義如下:

%CPU:程序佔用的CPU百分比;

%MEM:程序佔用記憶體的百分比;

VSZ:程序使用的虛擬記憶體量(KB);

RSS:程序佔用的固定記憶體量(KB);

START:程序被觸發啟動的時間;

TIME:程序實際使用CPU執行的時間(注意:這是cpu實際的執行時間);

COMMAND:命令的名稱和引數;

問題:如何檢視當前程序的記憶體使用情況,比如專案名稱為platform。

輸入命令:ps aux|grep platform

注意觀察上面用紅色框框圈出的引數,都是有用的,第一個1190是當前的程序號,0.3是cpu的使用率,8.9是記憶體的使用率,4582832單位是KB是虛擬記憶體的使用率,718104單位是KB是記憶體的使用率,16:01 是系統的啟動時間,如果是具體的時間值時,表示當天16點01分,在當前之前則只顯示具體的日期。1:27表示實際使用CPU的時間,可以看到現在時間(23:00)啟動了7個小時,CPU的使用時間為1小時27分。

補充:

(1)關於0.3的cpu使用率,我們也可以通過上面的引數計算得到

即CPU的Time的值為1小時27分,而到目前為止總共執行的時間為7個小時,因此,我們大概計算下CPU的平均利用率為:1.5/7=0.214,這與瞬時的0.3大致相吻合。

(2)關於8.9的記憶體使用率

使用的實體記憶體為718104Kb,而總的記憶體我們可以通過free,引數得到:

總的記憶體為8011936單位是KB,因此,我們可以得到實體記憶體的使用率:

718104/8011936=0.0896=9%左右

再補充知識點:

如何利用ps aux 將展示的資料按照cpu或者記憶體進行排序?

按照CPU降序: ps aux --sort=-%cpu

按照記憶體降序: ps aux --sort=-rss

注意:將-%cpu改為+%cpu則變成CPU升序;-rss改為+rss則變為記憶體升序。

場景二:如何去動態跟蹤指定程序的資源使用情況呢?

動態跟蹤的命令有很多,這裡用top命令。

輸入命令:top -p 程序id,則可以一秒一次跟蹤cpu的使用情況。

補充知識點:

(1)top -d 1 -n 1000  這一行命令表示延遲1秒為週期,列印1000次。

(2)在top命令下,輸入u,然後輸入相應的使用者名稱,則可以檢視相應的使用者程序,這個命令還是比較好用,比如,我們想看下mysql使用者的動態程序資訊。

輸出mysql使用者相關的程序資訊,如下:

(2)top 然後輸入1,檢視各個cpu的使用情況