V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyskk0x0
V2EX  ›  问与答

ulimit 如何正确设置?

  •  
  •   guyskk0x0 · 2018-01-22 22:53:18 +08:00 · 2324 次点击
    这是一个创建于 2257 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电脑是 Linux 系统,经常出现内存快用光时卡死,尝试用 ulimit 限制内存使用。

    /etc/security/limits.conf 配置(电脑是 8G 内存):

    *                hard    as              7500000
    guyskk           hard    as              5500000
    guyskk           soft    as              5000000
    

    实际效果貌似是限制单个进程,比如我开了两个进程,A 吃 3G 内存,B 吃 3G 内存没问题,单独吃 5 个 G 就会被系统杀掉,怎么限制我开的所有进程内存总和?

    4 条回复    2018-01-23 20:24:29 +08:00
    choury
        1
    choury  
       2018-01-22 23:32:35 +08:00
    你需要 cgroup
    guyskk0x0
        2
    guyskk0x0  
    OP
       2018-01-23 00:05:02 +08:00 via Android
    @choury ulimit 没辙了明天就研究 cgroup
    julyclyde
        3
    julyclyde  
       2018-01-23 20:12:26 +08:00
    按你上述的设置,如果你在同一个登录里执行俩大内存程序,是可以完美超标的

    这个涉及到 limits.conf 的原理,它是由 pam_limits.conf 解释的,只对登录后的进程树有效
    guyskk0x0
        4
    guyskk0x0  
    OP
       2018-01-23 20:24:29 +08:00
    @julyclyde #3 所以说 ulimit 无法实现这个功能,或者有别的设置方法?

    目前我是修改 /usr/lib/systemd/system/user.slice,用 cgroup 实现了限制:

    ```
    [Slice]
    MemoryMax=6G
    CPUQuota=300%
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2922 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 446ms · UTC 11:13 · PVG 19:13 · LAX 04:13 · JFK 07:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.