利用ulimit命令可以對資源的可用性進行控制。
-H選項和-S選項分別表示對給定資源的硬限制(hard limit)和軟限制(soft limit)進行設置。
硬限制(hard limit)一旦被設置以後就不能被非root用戶修改,軟限制(soft limit)可以增長達到硬限制(hard limit)。
如果既沒有指定-H選項也沒有指定-S選項,那麼硬限制(hard limit)和軟限制(soft limit)都會被設置。
limit的值可以是一個數值,也可以是一些特定的值,比如:hard,soft,unlimited,分別代表當前硬件限制、當前軟件限制、不限制。
如果limit參數被省略,除非指定-H選項,否則資源當前的軟限制(soft limit)將會被打印出來。
下面是ulimit命令的一些選項:
查看進程打開文件最大限制
- cat /proc/sys/fs/file-max 查看系統級的最大限制
- ulimit -n 查看用戶級的限制(一般是1024,向阿里雲華爲雲這種雲主機一般是65535)
查看某個進程已經打開的文件數
修改限制
臨時修改
ulimit -HSn 2048
或者使用
ulimit -n 2048 來修改,但是退出終端後又會變回原來未修改之前,只是臨時生效
永久修改
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
修改完成後,退出終端再次進入,查看是否生效ulimit -n
但上述的內容只是修改進程的最大openfile數,如果想要修改系統的最大打開數,則需要下面的方法;
修改:
echo 35942900 > /proc/sys/fs/file-max
檢驗:
cat /proc/sys/fs/file-max
但是上述也是臨時修改,永久修改如下:
vim /etc/sysctl.conf
....
省略上面,在最後一行添加
fs.file-max=35942900
保存退出
使配置生效
sysctl -p
在此驗證
退出終端後再次進入終端查看
cat /proc/sys/fs/file-max
/etc/security/limits.conf 文件格式如下:
limits.conf的格式如下:
<domain> <type> <item> <value>
username|@groupname type resource limit
----------------------------------------------------------------------------
domain:username|@groupname:設置需要被限制的用戶名,組名前面加@和用戶名區別。也可以用通配符*來做所有用戶的限制。
---------------------------------------------------------------------------
type:有 soft,hard 和 -,soft 指的是當前系統生效的設置值。hard 表明系統中所能設定的最大值。soft 的最大值不能超過hard的值。用 – 就表明同時設置了 soft 和 hard 的值。
---------------------------------------------------------------------------
resource:
core – 限制內核文件的大小
date – 最大數據大小
fsize – 最大文件大小
memlock – 最大鎖定內存地址空間
nofile – 打開文件的最大數目
rss – 最大持久設置大小
stack – 最大棧大小
cpu – 以分鐘爲單位的最多 CPU 時間
noproc – 進程的最大數目(系統的最大進程數)
as – 地址空間限制
maxlogins – 此用戶允許登錄的最大數目要使 limits.conf 文件配置生效,必須要確保 pam_limits.so 文件被加入到啓動文件中。
查看 /etc/pam.d/login 文件中有:
session required /lib/security/pam_limits.so