任何人都可以解释(或知道一个来源),提供有关limits.conf中的项目的细节? 手册页没有提供太多的细节。
例如它说:
rtprio maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) priority the priority to run user process with (negative values boost process priority)
这些有什么不同? 他们可以拿什么价值? 他们默认什么?
一些项目是显而易见的,但我在哪里可以find更好的解释(默认值,范围,他们实际上是什么意思等):
data maximum data size (KB) fsize maximum filesize (KB) memlock maximum locked-in-memory address space (KB) cpu maximum CPU time (minutes) nice maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19]
当超过CPU时会发生什么? 进程被杀害? 只有一个进程或整个用户被禁止使用CPU? 这是一次会议还是每分钟最多一次?
我试图find答案,但我能find的是一个几乎没有提供任何细节的手册页。
rtprio maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) priority the priority to run user process with (negative values boost process priority)
为什么这些不同?
在Linux上有不同类别的进程调度程序。 默认的(CFQ)基本上给每个想要运行的进程和等待可运行的任务的时间片等量,使得每个人平均等待轮stream等待的时间。 这个规则存在一些例外,但这是基本的想法。
另一类调度程序是实时调度程序。 实时是有点不同的,而是队列可运行的任务成为一个公平的排队scheme,实时进程将获得CPU时间一旦需要的进程,这驱逐了CPU的运行过程,以腾出空间的'实时'过程。
他们可以拿什么价值?
什么'优先'是改变程序的好处,所以在login你的主进程开始在一定的好处,任何你产卵的subprocess也开始在同一个漂亮。
这具有使其更有可能被调度以支持其他竞争过程的效果,并且可以使得用户体验对较低的正确性值更响应/交互,并且如果提高了正确性,则较less响应/交互。
例如,对于普通login用户而言,比可服务守护程序更低的优先级可能是重要的,或者对于login而言,root具有比其他所有更高的优先级。
至于实时性,争用是通过“rtprio”字段来处理的。 如果你有两个实时任务都想运行,那么'rtprio'值用来确定哪个进程首先select优先级。 更高的rtprio生成更高优先级的任务。
在limits.conf中进行设置,可以将实时任务设置为特定的优先级分区,而不需要root来设置值。 这对没有设置为使用实时调度程序运行的任务没有影响。
'nice'值应该与'rtprio'相同,但是标准的CFQ调度。 我从来没有尝试过。 当PAM将这些限制设置为好的值时,它将设置初始化进程,然后普通用户可以进入该高级或更高级别,而无需root来设置它们。 如果不显式renice,则意味着从该login名(例如)的shell中派生的所有进程将inheritancelimits.conf中设置的nice值,该值设置为最初创build的父进程。
什么是默认值?
“默认”限制 – 从技术上讲,它们全部设置为pid 1,除非明确设置,否则资源限制将从父进程inheritance,如果没有定义或覆盖任何限制,则init的inheritance是默认值。
其他价值
data maximum data size (KB)
当一个进程被初始化的时候,当进程被复制到内存中的时候,它会分配一些被称为“数据段”的内存,这是全局variables的空间,也许还有一些从堆中分配的其他初始化数据和内存。 限制控制stream程可以采用的最大分配量。
它不太可能会达到这个限制,因为malloc()很less过度使用数据段来存储数据。
fsize maximum filesize (KB)
这实际上只是设置文件可以写入的最大大小,就像用户一样。
memlock maximum locked-in-memory address space (KB)
几乎所有应用程序获得的内存都是“可驱逐的”。 这是可以换出来的。 内存locking的内存永远不可交换,并保持驻留。 这个值是严格控制的,因为它可能会被人们滥用,导致内存系统瘫痪并导致交换。 它通常对安全应用程序非常有用(它们永远不希望它们的页面交换 – 并且可以从交换分区读取)。
cpu maximum CPU time (minutes)
这表示进程在CPU上可以消耗的总时间量。 一个超过这个值的进程被杀死。 请注意,这与自从进程启动以来所经过的时间不一样。 如果一个cpu时间限制为1分钟,如果该进程的CPU利用率为100%,则需要花费1分钟,如果该进程使用了50%的利用率,则需要2分钟才能消耗。
会发生什么事超过CPU?
该进程发送终止进程的终止信号SIGXCPU 。 然后可以由父进程捕获并在那里处理。
只有一个进程或整个用户禁止使用CPU?
几乎所有引用的限制均以每个进程为基础进行处理。 包括CPU时间。 唯一不是我认为是该用户的login总数和进程总数。
其他一些限制是:
这是为pam_limits模块…它是setrlimit(2)和sysctl(8)值。 我的search没有发现任何硬性限制,但引用的手册页给出了一些解释。
快速的答案是很好的答案,所以在这里。
schedtool -r查找优先级的最小值和最大值; 和 ulimit -a查询当前的限制。 不要忘记设置软限制和硬限制,即使它们具有相同的值。 在我的testing中,这是唯一会在ulimit命令中显示出差异的东西。
希望这可以帮助你。