ulimit命令用來限制系統用戶對shell資源的訪問。
語法:
ulimit [-acdfHlmnpsStv] [size]
選項介紹:
-a 顯示當前所有的資源限制;
-c size: 設置core文件的最大值,單位:blocks;
-d size: 設置數據段的最大值,單位:kbytes;
-f size: 設置創建文件的最大值,單位:blocks;
-H: 設置硬件資源限制;
-l size: 設置在內存中鎖定進程的最大值,單位:kbytes;
-m size: 設置可以使用的常駐內存的最大值,單位:kbytes;
-n size: 設置內核可以同時打開的文件描述符的最大值;
-p size: 設置管道緩沖區的最大值,單位:kbytes;
-s size: 設置堆棧的最大值,單位:kbytes;
-S: 設置軟件資源限制;
-t size: 設置CPU使用時間的最大上限,單位:seconds;
-v size: 設置虛擬內存的最大值.單位:kbytes;
注意:size的值不一定要求是數字,可以是unlimited,表示沒有限制。
選項 | 含義 | 例子 |
---|---|---|
-H | 設置硬資源限制,一旦設置不能增加。 | ulimit – Hs 64;限制硬資源,線程棧大小為 64K。 |
-S | 設置軟資源限制,設置后可以增加,但是不能超過硬資源設置 | ulimit – Sn 32;限制軟資源,32 個文件描述符。 |
-a | 顯示當前所有的 limit 信息 | ulimit – a;顯示當前所有的 limit 信息 |
-c | 最大的 core 文件的大小, 以 blocks 為單位 | ulimit – c unlimited; 對生成的 core 文件的大小不進行限制。 |
-d | 進程最大的數據段的大小,以 Kbytes 為單位 | ulimit -d unlimited;對進程的數據段大小不進行限制。 |
-f | 進程可以創建文件的最大值,以 blocks 為單位 | ulimit – f 2048;限制進程可以創建的最大文件大小為 2048 blocks。 |
-l | 最大可加鎖內存大小,以 Kbytes 為單位 | ulimit – l 32;限制最大可加鎖內存大小為 32 Kbytes |
-m | 最大內存大小,以 Kbytes 為單位 | ulimit – m unlimited;對最大內存不進行限制 |
-n | 可以打開最大文件描述符的數量 | ulimit – n 128;限制最大可以使用 128 個文件描述符 |
-p | 管道緩沖區的大小,以 Kbytes 為單位 | ulimit – p 512;限制管道緩沖區的大小為 512 Kbytes |
-s | 線程棧大小,以 Kbytes 為單位 | ulimit – s 512;限制線程棧的大小為 512 Kbytes |
-t | 最大的 CPU 占用時間,以秒為單位 | ulimit – t unlimited;對最大的 CPU 占用時間不進行限制 |
-u | 用戶最大可用的進程數 | ulimit – u 64;限制用戶最多可以使用 64 個進程 |
-v | 進程最大可用的虛擬內存,以 Kbytes 為單位 | ulimit – v 200000;限制最大可用的虛擬內存為 200000 Kbytes |
執行范例:
當你執行一個程序,發現Can’t open so many files類似的錯誤,則是因為你的程序打開的文件數超過系統默認的最大文件數。解決方案:
$ ulimit -n 20000
$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 1024
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 20000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 16381
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit命令限制資源的使用,設置文件在:
/etc/security/limits.conf
比如:
xok_la hard cpu 1
xok_la hard fsize 50000
xok_la hard memlock 1000
xok_la hard nofile 50
xok_la hard nproc 50
這種方式限制是可以的,他是基于用戶來限制的,可以限制內存,CPU占用時間,打開的文件數等等.前提是你要登陸到這個系統上.如果只是以這個用戶來單獨運行文件的話,就不行……
擴展閱讀:
Linux下進程最大文件數為1024。
通常一個c,c++的可執行文件出錯時,通過調core dump會快速定位到代碼出錯的位置。因此,你需要用ulimit -c xxx設置core文件最大值。默認為0。