ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。
参数 描述
ulimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
-a 列出所有当前资源极限
-c 设置core文件的最大值.单位:blocks
-d 设置一个进程的数据段的最大值.单位:kbytes
-f Shell 创建文件的文件大小的最大值,单位:blocks
-h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限
-l 可以锁住的物理内存的最大值
-m 可以使用的常驻内存的最大值,单位:kbytes
-n 每个进程可以同时打开的最大文件数。 n的取值一般为2的指数幂
-p 设置管道的最大值,单位为block,1block=512bytes
-s 指定堆栈的最大值:单位:kbytes
-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者
-t 指定每个进程所使用的秒数,单位:seconds
-u 可以运行的最大并发进程数
-v Shell可使用的最大的虚拟内存,单位:kbytes
-x
范例1:
[root@localhost proc]# ulimit -a
core file size (blocks, -c) 100
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
pending signals (-i) 2047
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 2047
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@localhost proc]#
输出的每一行由资源名字、(单位,ulimit命令的参数)、软限制组成。详细解释:
参数 描述
core file size core文件的最大值为100 blocks,
data seg size 进程的数据段可以任意大
file size 文件可以任意大
pending signals 最多有2047个待处理的信号
max locked memory 一个任务锁住的物理内存的最大值为32kB
max memory size 一个任务的常驻物理内存的最大值
open files 一个任务最多可以同时打开1024的文件
pipe size 管道的最大空间为4096字节
POSIX message queues POSIX的消息队列的最大值为819200字节
stack size 进程的栈的最大值为8192字节
cpu time 进程使用的CPU时间
max user processes 当前用户同时打开的进程(包括线程)的最大个数为2047
virtual memory 没有限制进程的最大地址空间
file locks 所能锁住的文件的最大个数没有限制

问题1:

[smrtlink@localhost ~]$ulimit -n 8192     报错:
bash: ulimit: open files: 无法修改 limit 值: 不允许的操作

原因:你设置的最大打开文件限制数大于系统预设的最大系统级硬限制;

查看系统最大打开文件数系统级硬限制:

[smrtlink@localhost ~]$ cat /proc/sys/fs/file-max      #直接修改这个数可以修改系统预设的硬限制
4096

解决办法分一下2步:

1. 修改系统预设的硬限制:

vi /etc/sysctl.conf            在文件最后加入 fs.file-max = 6553560  ,保存;
sysctl -p                               使修改生效
(直接修改/proc/sys/fs/file-max也可以修改系统预设的硬限制)

2. 修改用户级文件打开数限制

vi /etc/security/limits.conf       再文件最后加入(这里我只改了smrtlink这个用户的限制,使用” * “代替 smrtlink 则对所有用户有效):

smrtlink        soft    nofile  8192         文件打开数 用户级软限制  (针对smrtlink这一个用户)
smrtlink       hard    nofile  32768     文件打开数 用户级硬限制
smrtlink       soft    nproc  8192        可使用线程数 用户级软限制  #与我们要解决的问题不相关
smrtlink       soft    nproc 32768       可使用线程数 用户级硬限制   #与我们要解决的问题不相关

保存;重启系统生效。

接下来使用 ulimit -n 8192 就不会报错了

来源:

https://www.cnblogs.com/zengkefu/p/5649407.html

https://segmentfault.com/q/1010000000251091

http://yangl.net/2017/12/21/ulimit-n/