Linux /etc/security/limits.conf说明


9

任何人都可以解释(或知道来源)提供关于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) 

这些有什么不同?他们可以采取什么价值观?他们默认为什么?

有些项目是显而易见的,但是在哪里可以找到更好的解释(默认值,范围,其实际含义等):

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?这是一次会话还是每分钟最多时间?

我试图找到答案,但是我只能找到一个手册页,几乎完全没有提供任何详细信息。


rute是Linux管理的极好的入门-尽管它没有提供关于limit.conf的很多细节,但它告诉您在哪里可以找到此信息-rute.2038bug.com/index.html.gz
symcbean

Answers:


18
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)基本上为要运行的每个进程提供了相等的时间片,并以可让每个人平均等待相等时间的轮流方式对可运行任务进行排队。该规则存在一些例外,但这就是基本思想。

调度程序的另一类是实时调度程序。实时稍有不同,而是将可运行的任务排入一个公平的排队方案中,实时进程将在进程需要时立即获得CPU时间,这会从CPU驱逐正在运行的进程,以便为“实时”腾出空间。的过程。

他们可以采取什么价值观?

“优先级”的作用是改变过程的精细度,以便在登录时,您的主进程以某种精细度开始,您生成的任何子进程也以相同的精细度开始。

这具有使其更有可能被调度为有利于其他竞争过程的效果,并且对于较低的尼斯值,可以使用户体验更具响应性/交互性,而如果提高了尼斯性,则可以使响应性/交互性降低。

例如,对于正常的登录用户而言,其优先级要比可维护的守护程序低,或者对root而言,登录时的优先级要比其他所有优先级高。

至于实时,争用由“ rtprio”字段处理。如果您有两个要同时运行的实时任务,则使用“ rtprio”值来确定首先选择优先级的进程。较高的rtprio会产生较高优先级的任务。

在limits.conf中进行设置可以将实时任务设置为特定的优先级,而无需root用户来设置值。这对未设置为使用实时调度程序运行的任务没有影响。

“ nice”值应与“ rtprio”相同,但用于标准CFQ调度。我从来没有尝试过。当PAM将这些限制设置为合适的值时,它将初始程序设置为正常,然后普通用户无需root即可设置该级别或更高的级别。如果您不显式地放弃,则意味着从该登录名从shell生成的所有进程(例如)都将从最初创建的父进程继承limits.conf中设置的值。

默认值是多少?

'默认'限制-从技术上讲,所有限制都设置为pid 1,除非明确设置,否则资源限制将从父进程继承,如果没有定义或覆盖任何限制,init则默认继承自。

其他价值

data 
maximum data size (KB) 

初始化进程后,当将进程复制到内存时,它将分配一些称为“数据段”的内存,这是全局空间(也许还有其他初始化的数据和从堆分配的内存)所在的空间。限制控制一个进程可以使用的最大分配数量。

因为malloc()很少过度使用数据段来存储数据,所以您不可能达到此限制。

fsize 
maximum filesize (KB) 

从字面上看,这只是设置与该用户一样可以写入文件的最大大小。

memlock 
maximum locked-in-memory address space (KB) 

应用程序获取的几乎所有内存都是“可指示的”。那可以换掉。内存锁定的内存永远不可交换,并且保持驻留状态。严格控制此值,因为它可能会被人们滥用以饿死内存系统并引起交换。它通常对安全性应用程序有用(该应用程序从不希望交换其页面-并从交换分区变得可读)。

cpu 
maximum CPU time (minutes) 

这表示一个进程在CPU上可以消耗的总时间。超过此值的进程将被杀死。请注意,这与启动该过程以来经过的时间不同。即,如果进程具有100%的cpu利用率,则1分钟的cputime限制将花费1分钟,而如果进程使用50%的利用率将消耗2分钟。

如果超出了cpu,会发生什么情况?

向进程发送SIGXCPU终止信号,该信号终止进程。然后可以由父进程捕获并在那里处理。

只有一个进程或整个用户无法使用CPU?

几乎所有引用的限制都是在每个过程的基础上处理的。包括CPU时间。我认为唯一的不是该用户的登录总数和进程总数。

还有其他一些限制:

  • 最大进程数包括轻量线程的数量。
  • RSS限制无所作为,而且已经有很多年没有了,它的设置毫无意义。

1

这是用于pam_limits模块...是setrlimit(2)sysctl(8)值。我的搜索没有发现任何硬性限制,但是引用的手册页提供了一些解释。


1

快速答案是不错的答案,所以这里是。

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

即使设置了相同的值,也不要忘记设置软限制和硬限制。在我的测试中,这是唯一在ulimit命令中显示出差异的东西。

希望这对您有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.