Linux /etc/security/limits.conf的解释

任何人都可以解释(或知道一个来源),提供有关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总数和进程总数。

其他一些限制是:

  • 最大进程包括轻量级线程的数量。
  • RSS的限制什么都不做,也没有多less年,没有意义。

这是为pam_limits模块…它是setrlimit(2)sysctl(8)值。 我的search没有发现任何硬性限制,但引用的手册页给出了一些解释。

快速的答案是很好的答案,所以在这里。

  • schedtool -r查找优先级的最小值和最大值; 和
  • ulimit -a查询当前的限制。

不要忘记设置软限制和硬限制,即使它们具有相同的值。 在我的testing中,这是唯一会在ulimit命令中显示出差异的东西。

希望这可以帮助你。