我有一个长时间运行的脚本,在一台内存为8GB的Linux机器上启动了几个subprocess。 运行几个小时后,占用了近90%的内存,这使得其他服务(如SSH)在启动磁盘交换时无响应。
什么是以编程方式限制我的脚本和所有subprocess的总体内存使用量的最佳方式,而不是分别为每个进程设置特定的内存限制? 不同的subprocess可以使用非常不同的内存量,因此设置固定的阈值效率非常低。
理想情况下,我只想简单地指定“仅使用高达75%的内存”,并让系统根据需要在孩子之间进行划分,以确保在任何给定的时间内,我仍然可以SSH进入机器。 我首先尝试设置一个cron作业来自动将sshd设置为最高优先级,但这没有任何作用,而且我经常无法进入SSH,或者SSH提示速度太慢。
以专用用户身份运行进程,并通过cgroups进行设置:
/etc/cgconfig.conf :
group limitedram { memory { memory.limit_in_bytes = 6442450944; } }
和/etc/cgrules.conf :
serviceuser memory limitedram/
这将serviceuser的内存使用限制为6 GB。