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

配置了最大连接数 65535,但是/etc/rc.local 里的没生效

  •  
  •   whx20202 · 2017-10-27 23:14:15 +08:00 · 5551 次点击
    这是一个创建于 2343 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是我按照网上的说法,在 /etc/security/limits.conf 里面,配置了以下内容

    * soft nofile 65535
    * hard nofile 65535
    root soft nofile 65535
    root hard nofile 65535

    然后我登录环境,ulimit -n 执行结果也确实是 65535,
    然后我在开机启动脚本 /etc/rc.local 启动 TcpRoute2 代理软件,结果这个进程起来之后 最大 fd 是 1024,提示 too many open files
    我手动重启 TcpRoute2,这个进程的最大 fd 就是 65535 了,问题规避

    通过查看 http://www.jb51.net/article/97706.htm ,我发现了原因:
    1、这个限制是针对单个程序的限制
    2、这个限制不会改变之前已经运行了的程序的限制
    3、对这个值的修改,退出了当前的 shell 就会消失
    比如说,我先运行了一个程序 A,然后通过 ulimit 修改了限制为 2048,然后运行 B,然后退出了 shell 再登录,然后运行 C。那就只有 B 可以打开 2048 个句柄。

    那么我有几个小问题,希望大家指点一下:
    1. 如果我就要开机启动脚本里面,启动的进程就是 65535,怎么办呢?或者是规范的做法是什么呢?
    2. @GameXG 就算用户不设置 65535,代码里面可以申请 65535 个 fd 吗?总感觉默认 1024 不够用,毕竟是代理软件
    谢谢
    第 1 条附言  ·  2017-10-28 09:56:56 +08:00
    谢谢各路大神,花式解决
    学到了好几种方法!
    16 条回复    2017-11-03 22:01:56 +08:00
    anjunecha
        1
    anjunecha  
       2017-10-27 23:30:58 +08:00 via iPhone
    什么系统咯?如果是 centos7 的话我记得有一个地方是要更改的
    whx20202
        2
    whx20202  
    OP
       2017-10-27 23:34:23 +08:00
    @anjunecha Ubuntu 16.04
    anjunecha
        3
    anjunecha  
       2017-10-27 23:37:57 +08:00 via iPhone   ❤️ 1
    @whx20202 应该是 systemd 的原因,你可以查查相关的资料看看
    pkking
        4
    pkking  
       2017-10-28 00:20:59 +08:00   ❤️ 1
    prlimit -n xxx -p pid
    whx20202
        5
    whx20202  
    OP
       2017-10-28 00:27:59 +08:00
    @pkking 这个要在启动 TcpRoute2 之后,给进程 pid 用上吗?
    artandlol
        6
    artandlol  
       2017-10-28 03:53:39 +08:00   ❤️ 1
    {
    echo "* soft nproc 65535" > /etc/security/limits.d/90-nproc.conf
    echo "* hard nproc 65535" >> /etc/security/limits.d/90-nproc.conf
    echo "* soft nofile 65535" >> /etc/security/limits.d/90-nproc.conf
    echo "* hard nofile 65535" >> /etc/security/limits.d/90-nproc.conf
    }
    lesteryu
        7
    lesteryu  
       2017-10-28 06:58:24 +08:00   ❤️ 1
    用 systemd 的服务不会加载 limits.conf,得在 systemd 服务的配置里改。

    *. 可以试一下 sudo systemctl edit rc-local.service,然后添加:
    [Service]
    LimitNOFILE=65536

    *. 更好的方法是把 TcpRoute2 做成一个单独的 systemd 服务,然后设置 LimitNOFILE。
    ryd994
        8
    ryd994  
       2017-10-28 07:56:48 +08:00 via Android   ❤️ 1
    好好用 systemd 服务文件,不要用 rclocal 来启动服务
    rclocal 就是给你启动时自动写点参数用的而已
    julyclyde
        9
    julyclyde  
       2017-10-28 08:55:24 +08:00   ❤️ 1
    哈哈哈,常见错误

    /etc/security/limits.conf 是 pam_limits.so 的配置文件,一般只有在“登录”的时候才执行,用于从(login/sshd)+pam_limits.so 的 root 身份降级到普通用户之前,设置好 rlimits

    而你这个根本就没有登录这个动作
    gamexg
        10
    gamexg  
       2017-10-28 17:46:30 +08:00
    2. 记得高点的 linux 内核版本支持,不过目前版本的 tcproute 不再增加功能了,下一个版本会直接重写,目前只完成了一部分,全部完成会比较久...
    yesono
        11
    yesono  
       2017-10-29 08:39:36 +08:00
    chmod +x /etc/rc.local
    tangbao
        12
    tangbao  
       2017-10-29 18:19:15 +08:00
    我遇到过类似的坑 想开机跑一些脚本 但是 rc.local 添加进去后没有反应

    lz 你试试在你的命令前面添加一个 sleep 10s 让系统完全启动了以后再运行这个脚本试试
    julyclyde
        13
    julyclyde  
       2017-10-30 15:09:55 +08:00
    @tangbao sleep 不可能有效的,别想了
    tangbao
        14
    tangbao  
       2017-10-30 16:50:58 +08:00
    @julyclyde 我的不可描述 Server 就是加了 sleep 启动的啊
    julyclyde
        15
    julyclyde  
       2017-10-30 16:56:40 +08:00
    @tangbao 时间上的相关关系并不等于因果关系
    tangbao
        16
    tangbao  
       2017-11-03 22:01:56 +08:00
    @julyclyde 但是我启动不了的服务的确加了 Sleep 后就能启动了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3075 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:46 · PVG 20:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.