Linux查看進程的資源限制信息的常見方法
簡介
Linux
上的 cat /proc/$pid/limits
命令提供有關特定進程的資源限制的信息,其中 $pid
是相關進程的進程 ID (pid)
。該文件是 `/proc 文件系統(tǒng)的一部分,該文件系統(tǒng)是一個虛擬文件系統(tǒng),提供有關進程和系統(tǒng)資源的信息。
基本用法
cat /proc/1234/limits # 其中 1234 是目標進程的 PID。
$pid
:目標進程的進程ID(PID)
??梢酝ㄟ^ps
命令查找,例如ps aux | grep <進程名>
。- 輸出:顯示指定進程的軟限制(
soft limit
)、硬限制(hard limit
)以及限制單位。
輸出示例:
Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 8388608 bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 6348 6348 processes Max open files 1024 1024 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 6348 6348 signals Max msgqueue size 819200 819200 bytes Max nice priority 20 20 priority Max realtime priority 99 99 priority Max realtime timeout unlimited unlimited us
關鍵字段解釋
Max cpu time
:該進程可以消耗無限量的CPU
時間(沒有上限)Max file size
:該進程可以創(chuàng)建任意大小的文件Max data size
:數(shù)據(jù)段(存儲變量和數(shù)組)不受限制Max stack size
:堆棧大小限制為8MB
(8388608 字節(jié)),堆棧存儲函數(shù)調用數(shù)據(jù)Max open files
:該進程最多可以同時打開 1024 個文件Max processes
:該進程最多可以產(chǎn)生 6348 個子進程
修改限制
ulimit
:用于調整當前shell
會話的限制prlimit
:用于對已經(jīng)運行的進程設置限制/etc/security/limits.conf
:用于設置用戶和組的默認資源限制
資源限制
這些是應用于進程的各種限制和約束,以控制其可以使用的資源,例如內存、CPU 和文件描述符。
此文件中列出的常見資源包括:
Limit
:資源的實際限制Current
:該進程當前對該資源的使用情況Soft Limit
:當前應用于進程的限制,可以由進程進行調整(在硬限制范圍內)Hard Limit
:不可超過的最大限制,它由系統(tǒng)管理員設置或采用默認設置Units
:衡量限制的單位(例如字節(jié)、KB 等)
常見的限制類型
Max process limit
:用戶可以創(chuàng)建的最大進程數(shù)。它限制了用戶可以生成的進程數(shù)量Max open files
:進程可以擁有的最大文件描述符數(shù)量。這會影響進程可以同時打開的文件、套接字等的數(shù)量Max locked memory
:可以鎖定到RAM
中的最大內存量,防止其被換出Max address space
:進程可以分配的最大虛擬地址空間量,其中包括內存、堆和堆棧Max CPU time
:進程可使用的最大CPU
時間。以秒為單位Max file locks
:進程可以擁有的文件鎖的最大數(shù)量Max number of threads
:進程可以創(chuàng)建的最大線程數(shù)Max user time
:進程在用戶空間中花費的最長時間(以秒為單位)(即不包括內核時間)Max virtual memory
:進程可以分配的虛擬內存總量,通常控制進程內存使用的上限Max file size
:進程創(chuàng)建文件的最大大小Max data size
:進程數(shù)據(jù)段的最大大小(包括堆和數(shù)據(jù))Max stack size
:進程堆棧的最大大小Max core file size
:核心轉儲文件(core dump
)的最大大小Max resident set
:駐留內存(RSS
,物理內存)的最大大小Max pending signals
:進程可排隊的最大信號數(shù)Max msgqueue size
:POSIX
消息隊列的最大大小Max realtime priority
:實時調度優(yōu)先級的最大值Max realtime timeout
:實時任務的最大超時時間(微秒)
軟限制與硬限制
- 軟限制:這是當前為進程設置的限制,進程可以更改它,管理員也可以使用
ulimit
(用于shell
)或prlimit
(用于正在運行的進程)等命令更改它 - 硬限制:這是除非超級用戶 (
root
) 更改,否則無法超過的最大限制,硬限制由內核強制執(zhí)行,它是軟限制的上限
常見用法
檢查進程資源限制
用于診斷進程是否因資源限制(如文件描述符不足)而失敗:
cat /proc/$(pidof bash)/limits
查看當前 bash
進程的限制
查找文件描述符限制
檢查進程的最大文件描述符數(shù):
cat /proc/1234/limits | grep "Max open files"
輸出示例:
Max open files 1024 1048576 files
結合 ulimit 調整限制
ulimit
命令可修改當前 shell
的軟限制(需要硬限制允許)。例如,增加文件描述符限制
ulimit -n 2048 cat /proc/$$/limits | grep "Max open files"
監(jiān)控系統(tǒng)限制
檢查所有進程的限制模式
for pid in /proc/[0-9]*; do echo "PID: $(basename $pid)"; cat $pid/limits; done
診斷文件描述符不足
假設某個服務(PID 1234
)報錯 Too many open files
cat /proc/1234/limits | grep "Max open files" lsof -p 1234 | wc -l
如果打開的文件數(shù)接近軟限制,臨時增加限制:
prlimit --pid 1234 --nofile=2048:1048576
或修改服務配置文件(如 systemd
的 LimitNOFILE
)
檢查核心轉儲
確保進程可以生成核心轉儲:
cat /proc/1234/limits | grep "Max core file size"
如果軟限制為 0,啟用核心轉儲:
ulimit -c unlimited
相關配置文件
/proc/$pid/limits
的值通常來自以下來源:
/etc/security/limits.conf
:定義用戶或組的默認資源限制
# 格式:<domain> <type> <item> <value> * soft nofile 1024 * hard nofile 1048576
*
表示所有用戶,nofile
對應 Max open files
/etc/security/limits.d/
:包含額外的限制配置文件- 系統(tǒng)默認值:由內核參數(shù)或系統(tǒng)配置(如
/proc/sys/
) 決定 ulimit
命令:動態(tài)修改當前shell
或進程的軟限制systemd
配置:服務進程的限制可在systemd
單元文件中的[Service]
快設置(例如LimitNOFILE=2048
)
以上就是Linux查看進程的資源限制信息的常見方法的詳細內容,更多關于Linux查看資源限制信息的資料請關注腳本之家其它相關文章!
相關文章
CentOS 7中Nginx日志定時拆分實現(xiàn)過程詳解
這篇文章主要介紹了CentOS 7中Nginx日志定時拆分實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06