如何限制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

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

$ ./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/