这是一个创建于 2260 天前的主题,其中的信息可能已经有所发展或是发生改变。
最近遇到一个奇怪的问题:
在命令行中手工启动某个程序,检查 /proc/xxxx/fd 目录, 能查到 1236 个 socket 句柄。
如果在 rc.local 中启动启动同样一个程序,检查 /proc/xxxx/fd 目录,只能查到 1024 个 socket 句柄。
用 ulimit -a 检查了 root 用户和当前用户的配置,都已经设置成了 65535.
root@Debian:/proc/3784/fd# 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) 16124
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) 16124
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
这是什么情况呢? 有 v 友遇到过类似的问题吗? 似乎 rc.local 启动程序,使用了不同的资源限制? 系统是 Debian 7。
谢谢!
第 1 条附言 · 2018-09-26 10:31:12 +08:00
root@Debian:~# cat /proc/sys/fs/file-max
206370
第 2 条附言 · 2018-09-26 11:06:02 +08:00
大概知道这个问题是什么原因导致的。
rc.local 在 /etc/security/limits.conf 生效之前就启动了,因此在 rc.local 中默认还是 1024 的限制。limits.conf 只有在*登录*之后才生效。
解决方式也比较简单:在 rc.local 中直接指定 ulimit -n 65535 即可。