为什么要限制Linux中打开文件和正在运行的进程的数量?


14

我对操作系统的内部运作了解不多,为什么我们对Linux中打开文件和正在运行的进程的最大数目有限制?

如果有人可以帮助我理解,我将不胜感激。

Answers:


16

这主要是出于历史原因。在较旧的Linux大型机上,许多用户会连接并使用大型机的资源。当然,有必要加以限制,并且由于诸如文件句柄和进程之类的操作已内置在内核中,因此它仅限于此。它还有助于限制攻击,如叉炸弹此处显示使用过程限制抵御炸弹的防御措施。

类似于前叉炸弹试图做的那样,它还允许不受控的派生和文件打开,从而有助于控制复杂的服务和守护程序。

还需要注意的是诸如可用的RAM和CPU数量之类的东西,以及32位计数器只能引用这么多的事实(32位计数器只能计数4294967296条目),但是这样的限制是远远不够的。高于程序员和系统管理员通常设置的那些。无论如何,早在拥有4294967296进程之前,您的计算机很可能已按计划重新启动,或者由于由于缺少另一资源而开始锁定。

除非您以584 TiB的内存运行Titan,否则您将不会很快达到此进程限制,除非您不会这样做,因为Linux无法在超级计算机上作为一个实例运行。即使这样,假设没有共享内存,平均进程也将仅具有大约146KB的内存。


2
叉炸弹+1,表明如果不加小心地在shell中使用这些递归方法,将有多危险!
aka_learner 2012年

9

生活和Linux中的大多数事物都有局限性。有时限制很高,不值得担心,有时又太低,由懒惰的程序员任意设置,或者由硬件限制设置。

当程序员做出决定(例如,地址等字段中允许的最大字符数)时,就会出现任意限制。设置一些任意限制比根据需要动态分配内存要容易得多。您不想将所有可用内存分配给一个简单的输入字段,但是您也不想允许输入覆盖其他可能很重要的内存。对于打开的文件和进程,可能有一个任意限制,或者可能受到可用内存的限制。如果是后者,那么当您接近极限时,坏事将开始发生,并且系统可能会挂起,因此在极限发生之前发挥作用通常是一件好事。有时,任意限制可能会在启动时根据内存或磁盘空间来确定,通常相当智能,

然后是由硬件设置的限制,例如整数或字符的大小。如果您使用的是32位系统,则有一个限制,该限制由整数的最大大小设置(如果无符号,则为4,294,967,295,如果有符号,则为一半)。


1
似乎任意的限制实际上可能是基于标准的。国际标准将邮政地址行限制为39个字符。这样的限制可能是任意的。地址限制为60个字符可能是任意的。不幸的是,很少有程序员检查标准,因此任意决定许多(有时是正确的)限制。
BillThor 2012年

我同意; 当我还是程序员的时候,我会花很多时间寻找既定的限制,就像您所说的那样,或者在OS中定义为宏(例如max_path等)。但是我不得不说,任意限制通常总比没有限制好,尤其是对于字段长度。:)
马蒂·弗里德

7

对于进程,/ proc / sys / kernel / pid_max是允许的最大pid,因此这是可以在任何时刻运行的进程数的硬限制。但是,对内存的限制通常会在此之前发挥作用。

对于整个计算机上打开文件的上限,/ proc / sys / fs / file-max是硬限制;这取决于计算机中的内存量,因此会有所不同。内核将其设置为:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

每1 MB RAM大约为100。

每个过程的限制是不同的。ulimit将定义这些。


-5

我们有一个限制,因为计算机有限制,我有4GB的RAM,所以现在不能运行15个游戏了吗?

我很可能可以稍作延迟来运行它,但这不是人类,这是您的PC和Linux内核的极限,您需要一个更好的内核和大量RAM才能容纳所有抛出的程序。

就像我运行Windows 7的笔记本电脑一样,我可以玩《战地风云》,但是它占用了我80%的RAM,因此,如果我尝试玩“ Need For Speed”,那通常需要60%的时间,我可以同时打开这两个游戏,但是整个系统是由于我正在运行2个重型程序,因此速度变慢了,它们都在争夺RAM(随机存取存储器)

简而言之,一台普通的计算机不能一次运行很多程序,音乐,记事本,浏览器,电子邮件,游戏,您认为这在计算机上很多,但仅仅是,像《魔兽世界》这样的游戏需要更多的RAM和使您的计算机陷入困境(除非您像昂贵的笔记本电脑一样拥有8-16 GB的RAM!)


感谢您提供有关进程的信息,因为我们知道,如果许多进程同时运行,CPU负载将很高,CPU内核上的流量将很高,无法处理,并且随着时间的推移,系统将进入挂起状态,而无法提供任何适当的服务时间片的任何过程来执行,我想如果我没有记错的话。但是,为什么在Linux中打开文件也受到限制?
aka_learner 2012年

我不知道打开文件的限制,我完全没有经历过,也许是您的计算机比我的受限,我对此不确定。我总是打开几个文件,然后打开Web浏览器,Music Player和Terminal。
育碧Terzuz

当我的mysql数据库给我以下消息时,通常会发生这种情况:“ 120428 20:30:01 [错误] / usr / sbin / mysqld:无法打开文件:'./djlabo_open/cart_layout.frm'(errno:24)”错误日志中的错误,因为linux不允许它打开此数据库文件。
aka_learner 2012年

这可能与打开文件的操作系统限制有所不同。
Nanne 2012年

1
@Terzuz确实是基于人们是否认为彼此的答案实际上是正确的。许多人(不幸的是,包括我在内)感到该答案可能并没有真正解决问题中提到的限制,而是其他限制。
恢复莫妮卡-ζ-2012年
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.