在我的服务器上,我有一个长时间运行的批处理进程,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