打开比`ulimit -n`更多的服务器套接字

时间:2015-11-18 06:31:39

标签: sockets ulimit

ulimit -a给了我以下信息:

vladon@vldn-dev:~$ 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) 31785
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
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) 31785
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

在这里运行的简单异步服务器的实践中,我无法连接比open files设置中指定的更多的套接字,即超过1024(实际上是1023)。

如果我将其增加到ulimit -n 10000,那么我打开的数量不能超过10000。

服务器实际上什么也没做,只是接受连接,它可以处理更多,但我不能设置ulimit -n unlimited或超过10000:

vladon@vldn-dev:~$ ulimit -n 10001
bash: ulimit: open files: cannot modify limit: Operation not permitted

如何完全禁用限制或避免此限制?

1 个答案:

答案 0 :(得分:1)

这些限制是(在Linux上)在/etc/security/limits.conf中配置的。 在这里,您可以增加每个文件的文件描述符数量,例如:添加此行(以root身份):

*               hard    nofile      20000

然后使用之前使用的ulimit命令进行验证。 在其他unix上,相应的内核配置工具中通常有一个类似的内核参数。

增加每进程限制可能反过来要求您增加系统范围的文件描述符数。为此,再次在linux上,使用:

# sysctl -w fs.file-max=100000