ulimit设置如何影响Linux?

最近,我有一个EAGAIN错误,一些asynchronous代码,让我仔细看看ulimit设置。 虽然我清楚地理解了某些限制,比如nofile ,其他人对我仍然感到困惑。

find关于如何设置这些设备的资源是相当容易的,但是我找不到任何文章来准确解释每个设置是什么以及如何影响系统。

取自/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.org上的定义:

尝试在select了非阻止模式的对象上进行操作。 再次尝试相同的操作将阻塞,直到某些外部条件使得可以读取,写入或连接(无论何种操作)。

我明白, 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 

正如你没有提到在Linux中限制什么是确切的问题,所以很难解决这个问题。 你使用ulimit -a来检查你在操作系统中的所有限制。 你也可以改变你的每一个限制(你可以减less它不能增加,除了root可以做任何事情)尝试看看man ulimit找出你需要改变的选项。

我做了功课,(几乎)find了每个选项的function。 另外,我已经注意到在/etc/security/limits.conf中有更多的选项比使用ulimit -a 。 因此,我只在这里logging后者。 当然,每个人都被邀请充实这个答案!

  • 核心文件大小 (块,-c)

    创build的核心文件的最大大小。 核心转储是一个系统快照(RAM +上下文切换+处理器寄存器)。

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


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

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

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



  • 文件大小 (块,-f)

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





  • 打开文件 (-n)

    打开文件描述符的最大数量。 文件描述符是用于访问文件或其他input/输出资源(例如pipe道或networking套接字)的抽象指示符。

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

    列出文件描述符: http : //www.cyberciti.biz/tips/linux-procfs-file-descriptors.html


  • pipe道大小 (512字节,-p)

    ???







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

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

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