如何设置进程内存使用限制?
类似于打开文件限制/etc/security/limits.conf
:
ubuntu soft nofile 4096
ubuntu hard nofile 8192
例如,当我使用eval
1.1G 文件中的原始 json 数据启动 python 脚本时,python 占用整个 RAM,同时在每个dict
和.我的机器挂了 20-30 分钟。此后:list
json.txt
# python read_data.py
Killed
Ubuntu系统今天非常稳定。它从挂起中恢复。交换使用量达到 8Gb。 RAM 完全空了,脚本正在运行。
我想知道killed
我的脚本是否可以配置这个限制?我可以这样调整我的系统吗?每个占用当前 RAM 大小 70% 以上的进程都将被终止或停止之类的。
答案1
使用相同的文件,limits.conf
您可以限制:
data
- 最大数据大小 (KB)memlock
- 最大锁定内存地址空间 (KB)rss
- 最大驻留集大小 (KB)as
- 地址空间限制(KB)stack
- 最大堆栈大小 (KB)
所以你几乎可以做很多事情。设置限制后,您可以使用ulimit -a
→ 检查此级别,您也可以使用此程序来设置它们。要使用limits.conf
您需要pam_limits.so
.
最后一件事就是杀死你的剧本的原因。我认为这可能是 OOM 杀手。 Linux 内核中的一个功能,当行为不当的进程吃掉所有实内存时,它会杀死它们;)用于dmesg
查明是否使用了 Killer。将会有大量关于要杀死的候选进程以及被杀死的进程的大量信息。
干杯,