ulimit 设置如何影响 Linux?

ulimit 设置如何影响 Linux?

最近,我遇到了EAGAIN一些异步代码错误,这让我不得不仔细查看ulimit设置。虽然我清楚地了解某些限制,例如nofile,但其他限制对我来说仍然相当困惑。

找到有关如何设置这些设置的资源相当容易,但我找不到任何文章准确解释每个设置的含义以及这些设置如何影响系统。

取自的定义/etc/security/limits.conf实际上并不是不言自明的:

- core - limits the core file size (KB)
- data - max data size (KB)
- fsize - maximum filesize (KB)
- memlock - max locked-in-memory address space (KB)
- nofile - max number of open files
- rss - max resident set size (KB)
- stack - max stack size (KB)
- cpu - max CPU time (MIN)
- nproc - max number of processes
- as - address space limit (KB)
- maxlogins - max number of logins for this user
- maxsyslogins - max number of logins on the system
- priority - the priority to run user process with
- locks - max number of file locks the user can hold
- sigpending - max number of pending signals
- msgqueue - max memory used by POSIX message queues (bytes)
- nice - max nice priority allowed to raise to values: [-20, 19]
- rtprio - max realtime priority
- chroot - change root to directory (Debian-specific)

所以如果有人能告诉我那些相当重要的 Linux 设置,我会很高兴!

我遇到的错误实际上是:

{ [Error: spawn mediainfo EAGAIN]
  code: 'EAGAIN',
  errno: 'EAGAIN',
  syscall: 'spawn mediainfo',
  path: 'mediainfo',
  spawnargs: 
   [ '--Output=XML',
     '/home/buzut/testMedia' ],
  cmd: 'mediainfo --Output=XML /home/buzut/testMedia' }

根据定义gnu网站

尝试对已选择非阻塞模式的对象执行会阻塞的操作。再次尝试同一操作将阻塞,直到某些外部条件使其能够读取、写入或连接(无论操作是什么)。

我理解EAGAIN错误是指暂时不可用的资源。将所有参数都设置为 是不明智的unlimited。因此,我会理解哪些参数的含义来识别阻塞并ulimit相应地调整设置、我的代码或两者。

以下是我目前的限制:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127698
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 64000
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) 127698
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

答案1

我已经做了功课,(几乎)找到了每个选项的作用。另外,我注意到 中的选项/etc/security/limits.conf比 中显示的要多ulimit -a。因此,我在这里只记录了后者。当然,欢迎大家来丰富这个答案!


  • 数据段大小 (千字节,-d)

    进程数据段的最大大小。数据段是目标文件的一部分或包含已初始化静态变量的程序的相应虚拟地址空间。

    https://en.wikipedia.org/wiki/Data_segment



  • 文件大小 (块,-f)

    shell 及其子进程写入的文件的最大大小。












  • 虚拟内存 (千字节,-v)

    shell 可用的最大虚拟内存量。虚拟内存将程序使用的内存地址(称为虚拟地址)映射到计算机内存中的物理地址。

    https://en.wikipedia.org/wiki/Virtual_memory


答案2

由于您没有提到 Linux 中限制的具体问题,因此很难修复它。您可以使用ulimit -afor 检查操作系统中的所有限制。您还可以更改每个限制(您可以减少它,但不能增加,但 root 可以执行任何操作)尝试查看man ulimit以找出您需要更改哪个选项。

相关内容