學(xué)習(xí)ulimit命令的用法。
功能說明:控制shell程序的資源。
語 法:ulimit [-aHS][-c core文件上限>][-d 數(shù)據(jù)節(jié)區(qū)大小>][-f 文件大 小>][-m 內(nèi)存大小>][-n 文件數(shù)目>][-p 緩沖區(qū)大小>][-s 堆疊大 小>][-t CPU時(shí)間>][-u 程序數(shù)目>][-v 虛擬內(nèi)存大小>]
補(bǔ)充說明:ulimit為shell內(nèi)建指令,可用來控制shell執(zhí)行程序的資源。
參 數(shù):
-a 顯示目前資源限制的設(shè)定。
-c core文件上限> 設(shè)定core文件的最大值,單位為區(qū)塊。
-d 數(shù)據(jù)節(jié)區(qū)大小> 程序數(shù)據(jù)節(jié)區(qū)的最大值,單位為KB。
-f 文件大小> shell所能建立的最大文件,單位為區(qū)塊。
-H 設(shè)定資源的硬性限制,也就是管理員所設(shè)下的限制。
-m 內(nèi)存大小> 指定可使用內(nèi)存的上限,單位為KB。
-n 文件數(shù)目> 指定同一時(shí)間最多可開啟的文件數(shù)。
-p 緩沖區(qū)大小> 指定管道緩沖區(qū)的大小,單位512字節(jié)。
-s 堆疊大小> 指定堆疊的上限,單位為KB。
-S 設(shè)定資源的彈性限制。
-t CPU時(shí)間> 指定CPU使用時(shí)間的上限,單位為秒。
-u 程序數(shù)目> 用戶最多可開啟的程序數(shù)目。
-v 虛擬內(nèi)存大小> 指定可使用的虛擬內(nèi)存上限,單位為KB。
ulimit -a 用來顯示當(dāng)前的各種用戶進(jìn)程限制。
Linux對于每個(gè)用戶,系統(tǒng)限制其最大進(jìn)程數(shù)。為提高性能,可以根據(jù)設(shè)備資源情況,設(shè)置各linux 用戶的最大進(jìn)程數(shù)。
例如,把某linux用戶的最大進(jìn)程數(shù)設(shè)為10000個(gè):
ulimit -u 10000
對于需要做許多 socket 連接并使它們處于打開狀態(tài)的 Java 應(yīng)用程序而言,
最好通過使用 ulimit -n xx 修改每個(gè)進(jìn)程可打開的文件數(shù),缺省值是 1024。
ulimit -n 4096 將每個(gè)進(jìn)程可以打開的文件數(shù)目加大到4096,缺省為1024
其他建議設(shè)置成無限制(unlimited)的一些重要設(shè)置是:
數(shù)據(jù)段長度:ulimit -d unlimited
最大內(nèi)存大?。簎limit -m unlimited
堆棧大小:ulimit -s unlimited
CPU 時(shí)間:ulimit -t unlimited
虛擬內(nèi)存:ulimit -v unlimited
有時(shí)服務(wù)器需要調(diào)整ulimit的stack size 參數(shù)調(diào)整為unlimited 無限,使用ulimit -s unlimited時(shí)只能在當(dāng)時(shí)的shell見效,重開一個(gè)shell則失效。
解決方法:
在/etc/profile 的最后面添加ulimit -s unlimited。
然后:
# source /etc/profile
使修改即時(shí)生效。
可能的問題:
如果碰到類似的錯(cuò)誤提示
ulimit: max user processes: cannot modify limit: 不允許的操作
ulimit: open files: cannot modify limit: 不允許的操作
以上操作對root用戶是不會(huì)提示這樣的限制信息的,只對普通用戶有影響,原因何在?
大家可以去研究下文件:/etc/security/limits.conf。
說明:
linux對用戶有默認(rèn)的ulimit限制,而這個(gè)文件可以配置用戶的硬配置和軟配置,硬配置是個(gè)上限。
超出上限的修改就會(huì)出“不允許的操作”這樣的錯(cuò)誤。
可以在limits.conf文件最后添加相關(guān)內(nèi)容,如下圖:
![](/d/20211018/1e599a2244cc02cdcba4de556bff7523.gif)
即限制任意用戶的最大線程數(shù)和文件數(shù)為10240。