Debian virt/res/shr 和 CPU 时间限制

Debian virt/res/shr 和 CPU 时间限制

服务器上有多个用户运行多个程序,其中一些程序似乎运行不正常并且会耗尽 RAM,就像没有明天一样,例如:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30091 xxxx 20   0 2194m 1.4g 1.4g S   21  9.0   0:56.03 aaaaa
30212 xxxx 20   0 1460m 1.1g 1.1g D    5  6.9   0:44.12 aaaaa

我们设置了文件系统配额,除此之外我什么都不知道。我希望能够限制 VIRT RES SHR(也许只限制 1 个就会限制其他 2 个?)。这可能吗?

我也想在命令终止之前限制 CPU 时间(实际上该命令是由另一个脚本调用的,我假设父脚本不会被终止?)。

我看过 limits.conf 和 PAM 的东西,但不确定最好的方法是什么,以及如何测试。

答案1

你想要setrlimit(RLIMIT_AS, ...)。从手册页(setrlimit(2)):

RLIMIT_AS

进程虚拟内存(地址空间)的最大大小(以字节为单位)。此限制会影响对 brk(2)、mmap(2) 和 mremap(2) 的调用,如果超出此限制,这些调用将失败并出现错误 ENOMEM。此外,自动堆栈扩展也将失败(并且如果未通过 sigaltstack(2) 提供备用堆栈,则生成 SIGSEGV 来终止进程)。由于该值是 long,因此在具有 32 位 long 的机器上,此限制最多为 2 GiB,或者此资源是无限的。

相关内容