首页 > linux > common > 5.linux修改打开文件数限制

5.linux修改打开文件数限制

linux默认打开的文件socket连接数量上限是1024, 高并发的时候如果超过这个数量限制会报错open too many files. 在linux系统中可以通过ulimit命令修改打开文件数上限.比如在使用java做socket连接服务器时, 同时连接用户超过默认设置1024个以后, 就会报这个错误导致连接更多的用户从而使服务器的性能无法充分利用.所以需要根据实际情况设置最大文件打开数来重复发挥服务器的性能.

1 ulimit命令参数介绍

可以用ulimit -a 来显示当前的用户进程限制和命令参数.

-a:显示目前资源限制的设定
-c <core文件上限>:设定core文件的最大值,单位为区块
-d <数据节区大小>:程序数据节区的最大值,单位为KB
-f <文件大小>:shell所能建立的最大文件,单位为区块
-H:设定资源的硬性限制,也就是管理员所设下的限制
-m <内存大小>:指定可使用内存的上限,单位为KB
-n <文件数目>:指定同一时间最多可开启的文件数
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节
-s <堆叠大小>:指定堆叠的上限,单位为KB
-S:设定资源的弹性限制
-t <CPU时间>:指定CPU使用时间的上限,单位为秒
-u <程序数目>:用户最多可开启的程序数目
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB.

2 linux查看当前用户进程数量和最大文件打开数量

ulimit -a命令可以查看最大文件打开数量

ulimit -a

显示如下

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3820
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3820
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

其中"open files"表示最大打开文件数.

open files                      (-n) 65535
···

3 修改当前用户最大文件打开数
===
Linux对于每个用户,系统限制其最大进程数和最大文件打开数量.可以通过"ulimit -n"修改最大文件打开数.通过"ulimit -u"修改最大进程数.在做服务器处理高并发连接时,linux默认最大文件打开数量为1024, 这个也是同时连接socket连接的数量, 修改这个值可以让linux同时处理更多的socket连接.

在shell命令行中输入命令:

ulimit -n 65535 ulimit -u 65535

参数说明
- ulimit -u 65535 最大进程数修改
- ulimit -n 65535 最大文件打开数修改

通过命令行设置ulimit命令参数只对当前用户生效.

4 修改所有linux用户的环境变量文件
===

修改/etc/profile文件可以针对全部用户生效.这样修改是永久有效.

vi /etc/profile ulimit -u 10000 ulimit -n 4096

保存后,通过source命令使配置生效:

source /etc/profile ```

转载请保留原文链接.