在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錯誤。