前言
檢查線上服務器狀態,有時會發現幾臺機器內存佔用很高。一般這種情況肯定是遠程登錄服務器,然後查看各個進程的內存佔用。當發現某個進程佔用的內存過高時,首要的檢查點通常是進程創建線程的情況,以下則是 Linux 中查看進程擁有的線程的相關命令
1. ps 命令
-
ps -T p <pid>
在ps
命令中,“-T”選項可以開啓線程查看。ps -T p 16241
命令輸出如下,其中SPID
列即爲線程的ID
。這個命令後面接上wc
即可統計進程下創建的線程總數ps -T p 16241 | wc -l
-
ps p <pid> -L -o pcpu,pmem,pid,tid,time,tname,cmd
示例命令ps p 16241 -L -o pcpu,pmem,pid,tid,time,tname,cmd
可以查看所有屬於進程 16241 的線程,其中TID
列就是線程ID。同樣,命令後接上wc
可以統計屬於該進程的線程總數
-
pstree -p <pid>
命令pstree -pa 25393
以樹形的方式顯示進程 25393 創建的線程
2. top 命令
top
命令可以實時顯示各個線程情況。要在top
輸出中開啓線程查看,可調用 top 命令的“-H”選項,該選項會列出所有 Linux 線程。在 top 運行時,也可以通過按“H”鍵將線程查看模式切換爲開或關,打開時每一行顯示的都是線程
top -H p <pid>
命令可檢查該進程內運行的線程狀況,示例如下。可以看到線程的總數,及每條線程的 ID 等信息
3. 查看系統文件
cat /proc/<pid>/status
命令可直接讀取系統保存的進程狀態文件,其中可以看到進程擁有的線程數量,及其所佔用的內存大小。需注意,使用該命令要保證登錄所用的賬戶有系統文件的訪問權限