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