网站搜索

如何限制 Linux 中进程的时间和内存使用


timeout 脚本是一个有用的资源监控程序,用于限制 Linux 中进程的时间和内存消耗。它允许您在控制下运行程序,并强制执行时间和内存限制,并在违反这些参数时终止程序。

无需安装,只需使用timeout程序执行命令及其参数,它将监控命令的内存和时间消耗,如果超出限制则中断进程,并以预定义的方式通知您信息。

要运行此脚本,您必须在 Linux 系统上安装 Perl 5 并安装 /proc 文件系统。

要检查 Linux 系统上安装的 Perl 版本,请运行以下命令。

perl -v

接下来,使用 git 命令将 timeout 存储库克隆到您的系统,然后使用 cd 命令移至本地存储库并像常用 Linux 命令一样调用它。

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

现在让我们看看超时脚本是如何工作的。

基本内存限制(100M虚拟内存):

第一个示例展示了如何使用 -m 标志将进程的内存使用限制为 100M 虚拟内存。内存的默认单位是千字节

此处,stress-ng 命令运行 4 个虚拟内存压力源 (VMS),这些压力源结合起来使用 40% 的可用内存达 10 分钟。因此,每个压力源使用10%的可用内存。

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

考虑到上面timeout命令的输出,stress-ng工作进程在仅仅1.16秒后就终止了。这是因为 VMS 的总内存消耗(438660 KB)大于 stress-ng 及其子级允许的虚拟内存使用量流程。

流程的基本时间限制:

要启用进程的时间限制,请使用 -t 标志,如图所示。

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

在上面的示例中,当 stress-ng CPU+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

此外,要返回进程的退出代码或 signal+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中进程的时间和内存消耗。您可以通过下面的评论表向我们提供有关超时脚本的反馈。