服务器有多个用户运行多个程序,其中一些似乎没有performance,并会像没有明天一样吃掉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?)。 这可能吗?
在命令终止之前,我想限制cputime(实际上命令被另一个脚本调用,我假设父脚本不会被终止?)。
我已经看了一下limits.conf和PAM的东西,但不知道最好的方法是什么,以及如何testing。
你想要setrlimit(RLIMIT_AS, ...) 。 从manpage( setrlimit (2)):
RLIMIT_AS进程的虚拟内存(地址空间)的最大大小(以字节为单位)。 此限制会影响对brk(2),mmap(2)和mremap(2)的调用,超过此限制后,会失败并显示错误ENOMEM。 另外,自动堆栈扩展将失败(并且如果没有通过sigaltstack(2)提供备用堆栈,则会生成一个SIGSEGV来杀死进程。 由于值长,在32位长的机器上,这个限制最多是2 GiB,或者这个资源是无限的。