我使用 nginx 提供静态文件服务并作为 Erlang IM 服务器的代理。每个用户使用两个长轮询 http 连接。操作系统是 ubuntu 服务器。
在高峰时段我看到:
> sudo more /proc/sys/fs/file-nr
1024 0 38001
在正常时间,文件描述符的数量低于 1024,但从未超过 1024。当我达到 1024 的限制时,用户会报告连接丢失。
为什么我被限制在 1024 个文件描述符,尽管 root 用户 (erlang)、www-data 用户 (nginx) 和打开的 TCP 连接都低于 1024 个?是否存在全局 1024 个限制?
我是否需要将 worker_rlimit_nofile 与 nginx 一起使用,或者是否足以为所有用户增加 limits.conf 中的 nofile?
谢谢
更多可能相关的信息:
> sudo nano /etc/security/limits.conf
...
root hard nofile 30000
root soft nofile 30000
> sudo sysctl fs.file-max
fs.file-max = 38001
> 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) 4160
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
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4160
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
答案1
除 root 之外的其他用户最有可能达到您的文件描述符限制。
尝试切换/etc/security/limits.conf
到
...
* hard nofile 30000
* soft nofile 30000
这样每个用户的上限就是 30000。