Linux程序資源限制

2021-08-17 21:32:00 字數 1587 閱讀 1061

在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...