【发布时间】:2011-07-09 10:01:20
【问题描述】:
在 Windows 中,系统维护了一些对象 - 事件、文件访问句柄、窗口、计时器等,这些对象不是无限的,因此系统中的所有程序都可以创建不超过 50k 的对象(我是不确定确切的数字,但对于这个问题不是很关键)。
因此,如果某个程序运行了很长时间并创建了很多对象并且没有释放它们(就像内存泄漏,但这里系统对象被泄漏),系统最终会耗尽对象和其他尝试尝试的程序做一些需要创建任何新系统对象的事情开始从系统函数中获取错误指示。例如,程序 A 运行并泄漏系统可用的所有对象,然后程序 B 尝试打开文件并失败,只是因为系统没有资源来服务该请求。此时唯一的解决方案是重新启动程序 A,以便系统回收泄漏的资源。
在 Unix/Linux 系统上是否存在同样的问题,或者它们是否受到某种保护?
【问题讨论】:
-
我不确定“泄漏”是否正确。也许“精疲力竭”会更准确。内核尽最大努力确保没有资源泄漏——就像完全丢失的资源一样。它对消耗大量资源的不良程序无能为力 - 除非确保在程序终止时清理混乱。而且,在 Linux 上,在内存滥用的情况下,它会启动 OOM Killer。
标签: windows linux unix resources operating-system