首页
学习
活动
专区
圈层
工具
发布

超极限
EN

Unix & Linux用户
提问于 2018-08-07 15:27:39
回答 2查看 1.1K关注 0票数 -1

我执行以下命令:

代码语言:javascript
复制
ulimit -a

它给出的产出如下:

代码语言:javascript
复制
core file size          (blocks, -c) 0 
data seg size           (kbytes, -d) unlimited 
scheduling priority             (-e) 0 
file size               (blocks, -f) unlimited 
pending signals              (-i) 14881 
max locked memory       (kbytes, -l) 64 
max memory size     (kbytes, -m) unlimited 
open files                      (-n) 1024 
pipe size            (512 bytes, -p) 8 
POSIX message queues     (bytes, -q) 819200 
real-time priority              (-r) 0 
stack size              (kbytes, -s) 8192 
cpu time               (seconds, -t) unlimited 
max user processes              (-u) 14881 
virtual memory          (kbytes, -v) unlimited 
file locks                      (-x) unlimited

问题是:一旦达到这个极限,会发生什么?我怎么知道这个限制已经达到了,现在我需要执行一些步骤了?

例如,如果最大用户进程达到819200,那么这是否意味着新进程不会启动?还是系统会优雅地关闭大部分空闲进程以腾出一些空间?或者可能是别的什么?

上述数字/限制是否会增加系统性能的开销?

EN

回答 2

Unix & Linux用户

发布于 2018-08-07 15:39:38

如果代表应用程序分配资源超过了该应用程序的资源限制,则资源分配将失败。如果“最大用户进程”值为N,并且为给定用户运行了N个进程,那么对fork() (或相关的)系统调用的调用将失败。如果“打开的文件”值为M,并且存在M打开的文件,则对open() (或相关的)系统调用的调用将失败。

这些值不会给系统性能增加任何开销,因为系统总是监视这些值。

票数 -1
EN

Unix & Linux用户

发布于 2018-08-07 15:41:53

您所包含的输出数据并不是真正的资源限制,因为您的shell欺骗并将许多无关的其他内容添加到此列表中。

如果您想查看什么是真正的资源限制,可以使用不欺骗的shell,或者检查文件。

代码语言:javascript
复制
/usr/include/sys/resource.h

并查找该文件中的RLIMIT_*条目。

现在,如果你达到一个软的极限,会发生什么:

  • 一个可忽略的信号被发送到进程。信号是: SIGXCPU SIGXFSZ

如果达到了硬限制,这个过程就会终止。

请注意,这并不适用于所有限制。检查http://schillix.sourceforge.net/man/man2/getrlimit.2.html是否有关于在每个特定限制上发生的事情的描述。

票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/461097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档