Unix / Linux系统是否容易泄漏全局内核对象?

时间:2011-03-05 13:46:24

标签: windows linux unix resources operating-system

在Windows中,系统维护的对象 - 事件,文件访问句柄,窗口,计时器等不是无限制的,这样系统中的所有程序都可以创建不超过50k的对象(我是不确定确切的数字,但这对这个问题不是很关键)。

因此,如果某个程序运行了很长时间并且创建了大量对象并且没有释放它们(就像内存泄漏一样,但这里系统对象被泄漏),系统最终耗尽了对象和其他尝试的程序执行需要创建任何新系统对象的操作开始从系统函数获取错误指示。例如,程序A运行并泄漏系统可用的所有对象,然后程序B尝试打开文件而失败只是因为系统没有资源来为该请求提供服务。此时唯一的解决方案是重新启动程序A,以便系统回收泄漏的资源。

在Unix / Linux系统上是否存在同样的问题,或者它们是否以某种方式受到保护?

2 个答案:

答案 0 :(得分:3)

他们遇到同样的问题,但在某种程度上可以加强/限制。通常默认情况下,每个进程的限制方式低于任何会导致系统范围问题的进程。所有你需要做的就是开始很多过程。 ulimit命令可以查看其中一些限制。有些* nixes可以为每个用户设置限制(参见某些linux系统上的/etc/security/limits.conf)

但是如果你删除限制,或者有很多进程做坏事,系统范围的总限制通常受可用资源(内存)的限制

如果您想要演示资源限制,请在bash shell中运行this command并查看您的系统是否仍然可用:

:(){ :|:& };: 

答案 1 :(得分:2)

Unix / Linux中的两个错误号是:

  • ENFILE(23):系统中打开的文件太多
  • EMFILE(24):打开的文件太多

第一个是系统范围限制,第二个是每个进程限制。系统范围的限制通常足够大,以至于大多数系统最近都没有遇到它,但在PDP-11计算机时代,它(ENFILE)是一个真正的问题。