在Ubuntu系统中,ulimit
命令用于控制shell进程及其子进程可以使用的资源限制。为了避免OOM(Out of Memory)错误,你可以设置一些与内存相关的限制。以下是一些常用的ulimit
设置:
设置虚拟内存限制:
ulimit -v <size_in_kb>
例如,设置为2GB:
ulimit -v 2097152
设置物理内存限制:
ulimit -m <size_in_kb>
例如,设置为1GB:
ulimit -m 1048576
设置最大数据段大小:
ulimit -d <size_in_kb>
例如,设置为512MB:
ulimit -d 524288
设置最大文件大小:
ulimit -f <size_in_blocks>
例如,设置为1GB:
ulimit -f 1073741824
设置最大堆栈大小:
ulimit -s <size_in_kb>
例如,设置为1GB:
ulimit -s 1048576
设置最大进程数:
ulimit -u <number_of_processes>
例如,设置为1024:
ulimit -u 1024
设置打开文件描述符的最大数量:
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错误。