如何限制 Linux 中進程的時間和內存使用

超時腳本是一個有用的資源監控程式,用於限制 Linux 中進程的時間和內存消耗。它允許您在控制下運行程序,強制執行時間和內存限制,違反這些參數時終止程序。

無需安裝,只需使用timeout程式執行一個命令及其參數,它將監控命令的內存和時間消耗,如果超出限制,將中斷該進程並通知您預定的消息。

要運行此腳本,您必須在 Linux 系統上安裝Perl 5,並掛載/proc 文件系統

要檢查 Linux 系統上安裝的Perl版本,運行以下命令。

$ perl -v
Check Perl Version in Linux

接下來,使用git 命令timeout存儲庫克隆到您的系統,然後使用cd 命令進入本地存儲庫並將其作為常規 Linux 命令調用。

$ cd ~/bin
$ git clone https://github.com/pshved/timeout.git
$ cd timeout

現在讓我們看看timeout腳本的工作原理。基本內存限制(100M 虛擬內存):

基本記憶體限制(100M虛擬記憶體):

第一個例子展示了如何將一個進程的記憶體使用限制在100M虛擬記憶體,使用-m標誌。記憶體的默認單位是千字節

在這裡,stress-ng命令運行了4個虛擬記憶體壓力器(VMS),它們結合起來使用40%的可用記憶體,持續10分鐘。因此,每個壓力器使用10%的可用記憶體。

$ ./timeout -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m
Limiting Memory of Process

考慮到上面timeout命令的輸出,stress-ng工作進程在僅僅1.16秒後就被終止了。這是因為VMS的總記憶體消耗(438660千字節)超過了允許stress-ng及其子進程使用的虛擬記憶體。

基本進程時間限制:

要啟用進程時間限制,請使用-t標誌,如下所示。

$ ./timeout -t 4 stress-ng --vm 4 --vm-bytes 40% -t 10m
Time Limiting of Process

在上面的例子中,當stress-ngCPU+SYS時間超過定義的值4時,工作進程被殺死。

同時限制進程的時間和記憶體:

您也可以同時限制記憶體時間,如下所示。

$ ./timeout -t 4 -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

Timeout還支持一些高級選項,例如--detect-hangups,它可以啟用掛斷檢測。

$ ./timeout --detect-hangups -m 100000 stress-ng --vm 4 --vm-bytes 40% -t 10m

您可以使用RSS常驻集大小)内存限制来监控,使用--memlimit-rss-s开关。

$ ./timeout -m 100000 -s  stress-ng --vm 4 --vm-bytes 40% -t 10m

此外,要返回进程的退出代码或信号+128,请使用--confess-c选项,如下所示。

$ ./timeout -m 100000 -c  stress-ng --vm 4 --vm-bytes 40% -t 10m

有关更多信息和使用示例,请参阅timeout Github存储库:https://github.com/pshved/timeout

您可能还会发现以下相关文章同样有用:

  1. 如何使用批处理模式中的“top”查找内存使用量前15名的进程
  2. CPUTool – 限制和控制Linux中任何进程的CPU利用率
  3. 如何使用CPULimit工具限制Linux中进程的CPU使用率

timeout脚本是一个简单的资源监控程序,主要限制Linux中进程的时间和内存消耗。您可以通过下面的评论表单向我们提供有关timeout脚本的反馈。

Source:
https://www.tecmint.com/limit-time-and-memory-usage-of-linux-process/