使用多less个Windows句柄是“太多”了?

据我所知,这个问题的答案可能取决于registry设置和Windows的版本,也可能取决于RAM的数量,如果没有足够的内存。 为了这个问题,假定服务器有足够的RAM(3 + GiB)。

如果一个应用程序(这种情况下的第三方应用程序)以几百个小时的时间泄漏句柄,那么在其他应用程序遇到麻烦之前,该应用程序可以泄露多less个句柄? 我所说的“麻烦”是指,例如,无法启动线程,无法打开文件,等等。

我已经看到一些服务器(轻载)使用几万个句柄运行一个进程(通常是一个数据库进程),所以旧的10000句柄限制显然不是问题。 (无论如何,这是一个每个进程的限制,所以不会影响我的应用程序,在这一点之下)。

有人可以回答这个问题,也可以指出一些资源,解释一下Windows服务器在处理完(句柄或其他系统资源)之前可以处理多less个句柄?

有没有办法来检查(文件)句柄是否有效?

HANDLE的大小是多less?

join并终止一个Windows线程

URLConnection的Java应用程序导致“打开的文件过多”

从线程ID获取句柄是不可能的?

手柄 – 文件句柄和目录句柄结构

wxPython不会closures与父窗口句柄的框架

哪些Win32用户模式句柄可以在进程间共享?

当应用程序崩溃时打开句柄会发生什么? (Windows XP以上)

NtQueryObject挂在具有特定访问掩码的对象types编号30上

见雷蒙德陈在这个话题上的帖子 。 窗口管理器强制每个进程的限制为10K,整个系统的总限制为32K。 所以如果它“只”泄漏每小时100把手,那么你有几天的正常运行时间,然后开始行为不端。

请注意,并非所有句柄都是相同的。 窗口句柄不是数据库句柄,例如,可能遵循不同的规则。 所以这个限制可能不适用,这取决于程序泄露的是什么类型的句柄。 也阅读这篇博文。

桌面堆 ,这是一个真正的“东西”手柄代表的生活内存池。 有时并不是多少个句柄分配了多少,而是每个对象在这个句柄下使用了多少内存。 你可以这样调试堆。 这是一个痛苦的安装。

(这是从我的答案中的另一个回收)

据此,1万。

由于这些值可能会随新的Windows版本而改变,因此可以使用TestLimit工具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

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...