有人能解释一下(或知道来源)有关 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?这是针对一个会话还是针对每分钟的最大时间?
我试图寻找答案,但我所能找到的只是一个几乎没有提供任何详细信息的手册页。
答案1
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 中驱逐出去,以便为“实时”进程腾出空间。
它们可以采取什么价值观?
“优先级”的作用是改变进程的优劣,以便在登录时您的主进程以某个优劣启动,您生成的任何子进程也以相同的优劣启动。
这使得它更有可能被安排优先于其他竞争进程,并且可以使用户体验对于较低的niceness值更具响应性/交互性,如果niceness值提高,则响应性/交互性降低。
例如,对于普通登录用户来说,拥有比可服务守护进程更低的优先级可能很重要,或者对于 root 用户来说,拥有比其他所有用户更高的登录优先级可能很重要。
至于实时,争用由“rtprio”字段处理。如果有两个实时任务都想运行,则“rtprio”值用于确定首先选择哪个进程作为优先级。较高的 rtprio 会产生较高优先级的任务。
在 limits.conf 中设置此项允许将实时任务设置为特定优先级,而无需 root 设置该值。这对未设置为使用实时调度程序运行的任务没有影响。
“nice”值应与“rtprio”相同,但适用于标准 CFQ 调度。但我从未尝试过。它将 PAM 将这些限制设置为该 nice 值时生成的初始进程设置为该 nice 值,然后普通用户可以转到该 nice 级别或更高级别,而无需 root 来设置它们。如果您不明确重新设置,则意味着从该登录的 shell 生成的所有进程(例如)都将从最初创建的父进程继承 limits.conf 中设置的 nice 值。
默认设置是什么?
“默认”限制 - 从技术上讲,除非明确设置,否则它们全部被设置为 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 上可以消耗的总时间。超过此值的进程将被终止。请注意,这与进程启动以来经过的时间不同。例如,如果进程的 CPU 利用率为 100%,则 CPU 时间限制为 1 分钟将需要 1 分钟才能消耗,但如果进程的利用率为 50%,则需要 2 分钟才能消耗。
当 CPU 超出限制时会发生什么?
进程会收到终止信号SIGXCPU
,终止进程。然后父进程可以捕获该信号并进行处理。
只有一个进程还是整个用户被禁止使用 CPU?
几乎所有引用的限制都是基于每个进程处理的。包括 CPU 时间。唯一不是我相信该用户的总登录次数和总进程次数。
其他一些具有限制的问题包括:
- 最大进程数包括轻量级线程的数量。
- RSS 限制没有任何作用,并且多年来也没有起到作用,因此设置它毫无意义。
答案2
快速的答案就是好的答案,因此就这样。
- 使用 ; 找出优先级的最小值和最大值
schedtool -r
,并 - 使用 查询当前限制
ulimit -a
。
不要忘记设置软限制和硬限制,即使它们的值相同。在我的测试中,这是唯一会在 ulimit 命令中显示差异的东西。
希望这对你有帮助。
答案3
这是针对pam_limits
模块的...它是setrlimit(2)
和sysctl(8)
值。我的搜索没有发现任何硬性限制,但引用的手册页给出了一些解释。