据我所知,这个问题的答案可能取决于注册表设置和 Windows 版本,如果内存不足,还可能取决于 RAM 量。对于这个问题,假设服务器有足够的 RAM (3+ GiB)。

如果一个应用程序(本例中为第三方应用程序)每小时泄漏几百个句柄,那么在其他应用程序遇到麻烦之前,该应用程序总共可以泄漏多少个句柄?我所说的“麻烦”是指,例如,无法启动线程、无法打开文件等等。

我见过一些服务器(轻载)使用数万个句柄的进程(通常是数据库进程)运行得很好,因此旧的 10000 个句柄限制显然不是这里的问题。(无论如何,这是每个进程的限制,所以不会影响我的应用程序,它远低于该点。)

有人可以回答这个问题或者向我指出一些资源来解释在有效耗尽(句柄或其他系统资源)之前 Windows 服务器将允许多少个总句柄吗?

有帮助吗?

解决方案

查看 Raymond Chen的岗位这个话题。窗口管理器强制的10K每个进程的限制,并且具有32K整个系统总限度。因此,如果“只”泄漏每小时100个手柄,那么你的正常运行时间的几天它开始之前,行为不端。

请注意,并非所有的句柄是相等的。窗口句柄而非dB把手,例如,并且可能遵循不同的规则。因此,这种限制可能不适用,这取决于那种什么处理程序是否漏水。 另外阅读这个博客帖子。

其他提示

桌面堆,这是一个内存池,其中真正的“东西”把手代表生命。 这有时不那么多,你有多少处理分配,但根据该手柄是用各多少内存的对象:您可以调试堆的这样。这是一个疼痛来安装。

(这是从我的答案中的另一个再循环)

由于这些值可能会随着新的 Windows 版本而改变,因此您可以使用 SysInternals 工具 TestLimit / TestLimit64 得到一个粗略的估计。x64版本可能会运行一段时间,特别是对于内存测试(它可能会使用硬盘(交换文件)来获取更多虚拟内存)。

从以下位置获取工具 http://live.sysinternals.com/WindowsInternals/ 或者 http://download.sysinternals.com/files/TestLimit.zip

命令行选项:

-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit

根据,10000

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top