如何限制进程运行时的内存使用?

如何限制进程运行时的内存使用?

在我的服务器上,我有一个长时间运行的批处理进程,process_a它已经运行了几天了。我不介意这个过程需要多长时间。问题是如何process_a总是将所有(99%)的内存(RAM)占用给自己。我process_b现在确实需要运行它。但是,process_b可能是由于 RAM 不足而始终挂起。

有没有办法限制进程运行时的内存使用?

我不想重新开始,process_a因为所有取得的进展可能会丢失。我不是运行的程序的所有者process_a,因此我无法修改process_a以定期保存进度检查点。我正在考虑以某种方式强制将 的一半内存process_a转储到交换中,以便重新获得 的一些内存process_b

所有的答案这个问题这个问题没有解决进程正在运行的事实。

答案1

如果process_a不主动使用内存,那么process_b启动时就会被换出。

因此,如果您没有看到process_a内存被换出,则可能是因为process_a正在积极使用内存。

那么如何判断自己process_a暂时不活动呢?

你暂停它。

kill -TSTP $pid

然后你跑process_b并让process_a移动进行交换。

如果你想推出更多内存来交换签出:https://gitlab.com/ole.tange/tangetools/tree/master/swapout

最后process_b完成后,松开刹车process_a

kill -CONT $pid

答案2

Check for the priority of the process

Higher priority is -20
lower prioritty is +19
Neutral is 0

if process_a is having highher priority based on your requirement reduce the priority (-20 to +19). Higher the priority it will consumes most of resources


You can try with ulimit command options too

相关内容