在linux系統下啟動執行乙個程序時,可對該程序執行時可占用的資源進行限制。
程序的資源限制通常是在系統初始化時由init程序建立的,然後後續程序繼承。
用法:
#include可以獲取當前程序的限制值和設定限制值。int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const
struct rlimit *rlim);
還有一種方式,使用shell的內建命令 ulimit :用於shell啟動程序所占用的資源。
每種資源都有軟限制和硬限制兩種:
硬限制可以在任何時候任何程序中設定,只能由超過使用者提起。
軟限制是核心實際執行的值,軟限制可以設定為任意小於等於硬限制值。
更改資源限制時,有三條原則:
1、軟限制值必須小於等於硬限制值。
2、普通使用者只能調低硬限制值,並且是不可逆的。
3、超級使用者可以提高硬限制值。
常進行限制的資源型別:
名稱意義
rlimit_as
程序總共可用的記憶體大小的最大值
rlimit_core
core檔案的最大尺寸,如果為0說明不能建立core檔案
rlimit_cpu
cpu時間的最大值(單位:秒)
rlimit_data
資料段大小的最大值
rlimit_fsize
建立檔案的大小的最大值
rlimit_locks
程序可建立的檔案鎖的數量的最大值
rlimit_memlock
程序中使用mlock鎖定記憶體的最大尺寸
rlimit_nofile
程序中檔案的開啟數量的最大值
rlimit_nproc
每個real user id的子程序數量的最大值
rlimit_rss
最大常駐儲存區大小
rlimit_sbsize
socket緩衝的大小的最大值
rlimit_stack
棧的最大尺寸
rlimit_vmem
=rlimit_as
當程序使用資源超過這個限制,會收到系統核心的限制,通過訊號進行通知。
如,設定了cpu的使用限制。若程序使用達到軟限制後,核心會傳送乙個sigxcpu訊號,預設處理機制是會終止程序,但是程序可以捕獲該訊號,如果繼續消耗cpu時間,直到達到硬限制,核心會直接傳送sigkill訊號。
程序棧的最大位元組長度,若超出該限制會收到sigsegv訊號。
工程實踐:
常用的限制值。
實存,虛存,core檔案大小,cpu親合力(指定程序僅在指定處理器上執行),程序優先順序,cpu使用率。
**實踐:
void setrsslimit(){
struct rlimit rl;
rl.rlim_cur = flags_rss_limit_mb << 20 ;//mb convert to bytes.
rl.rlim_max = rlim_infinity;
setrlimit(rlimit_rss,&rl);
linux程序資源限制
linux程序可分為前台程序 後台程序 守護程序 前台程序 後台程序沒有脫離shell,其父程序都為shell程序,其資源限制也繼承至相應shell程序,可用ulimit工具修改其資源限制 ulimit a 檢視當前shell所有資源限制 ulimit n 檢視當前shell能開啟的檔案總數 參考文...
程序資源限制
每個程序都有一組資源限制,程序的資源限制通常是在系統初始化時由 0 程序建立的,然後由後續程序繼承。每種實現都可以用自己的方法對資源限制做出調整。可以使用 getrlimit 和 setrlimit 函式來查詢和修改程序的資源限制。include int getrlimit int resource...
限制程序使用的資源
getrlimit和setrlimit函式 每個程序都有一組資源限制,其中某一些可以用getrlimit和setrlimit函式查詢和更改。include include int getrlimit int resource,struct rlimit rlptr int setrlimit int...