如何限制 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。
您可能还会发现以下相关文章同样有用:
- 如何在批处理模式下使用“top”按内存使用情况查找前 15 个进程
- CPUTool – 限制和控制 Linux 中任何进程的 CPU 使用率
- 如何使用 CPULimit 工具限制 Linux 中进程的 CPU 使用率
timeout脚本是一个简单的资源监控程序,本质上限制了Linux中进程的时间和内存消耗。您可以通过下面的评论表向我们提供有关超时脚本的反馈。