使用多少个 Windows 句柄算“太多”?
-
11-09-2019 - |
题
据我所知,这个问题的答案可能取决于注册表设置和 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