ubuntu

Ubuntu ulimit如何设置以避免OOM

小樊
46
2025-06-10 01:04:28
栏目: 智能运维

在Ubuntu系统中,ulimit命令用于控制shell进程及其子进程可以使用的资源限制。为了避免OOM(Out of Memory)错误,你可以设置一些与内存相关的限制。以下是一些常用的ulimit设置:

  1. 设置虚拟内存限制

    ulimit -v <size_in_kb>
    

    例如,设置为2GB:

    ulimit -v 2097152
    
  2. 设置物理内存限制

    ulimit -m <size_in_kb>
    

    例如,设置为1GB:

    ulimit -m 1048576
    
  3. 设置最大数据段大小

    ulimit -d <size_in_kb>
    

    例如,设置为512MB:

    ulimit -d 524288
    
  4. 设置最大文件大小

    ulimit -f <size_in_blocks>
    

    例如,设置为1GB:

    ulimit -f 1073741824
    
  5. 设置最大堆栈大小

    ulimit -s <size_in_kb>
    

    例如,设置为1GB:

    ulimit -s 1048576
    
  6. 设置最大进程数

    ulimit -u <number_of_processes>
    

    例如,设置为1024:

    ulimit -u 1024
    
  7. 设置打开文件描述符的最大数量

    ulimit -n <number_of_open_files>
    

    例如,设置为4096:

    ulimit -n 4096
    

持久化设置

上述ulimit设置仅在当前shell会话中有效。如果你希望这些设置在系统重启后仍然生效,可以将它们添加到系统的启动脚本中。以下是一些常见的方法:

方法一:修改 /etc/security/limits.conf

编辑 /etc/security/limits.conf 文件,添加以下行:

* soft as unlimited
* hard as unlimited
* soft memlock unlimited
* hard memlock unlimited
* soft nofile 4096
* hard nofile 4096

方法二:修改 /etc/pam.d/common-session

编辑 /etc/pam.d/common-session 文件,添加以下行:

session required pam_limits.so

方法三:修改 /etc/pam.d/common-session-noninteractive

编辑 /etc/pam.d/common-session-noninteractive 文件,添加以下行:

session required pam_limits.so

方法四:修改 /etc/systemd/system.conf/etc/systemd/user.conf

如果你使用的是systemd,可以在 /etc/systemd/system.conf/etc/systemd/user.conf 文件中添加以下行:

DefaultLimitNOFILE=4096

然后重新加载systemd配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart <your_service>

通过这些方法,你可以确保在系统重启后,内存和其他资源的限制仍然有效,从而避免OOM错误。

0
看了该问题的人还看了