V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
initialdp
V2EX  ›  Linux

请教问题: Linux 下的 fd 数目限制

  •  
  •   initialdp · 2018-09-26 09:56:20 +08:00 · 2254 次点击
    这是一个创建于 2275 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近遇到一个奇怪的问题:
    在命令行中手工启动某个程序,检查 /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 即可。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:48 · PVG 13:48 · LAX 21:48 · JFK 00:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.