Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在使用的Windows句柄数是多少;太多了;?_Windows_Performance_Handle - Fatal编程技术网

正在使用的Windows句柄数是多少;太多了;?

正在使用的Windows句柄数是多少;太多了;?,windows,performance,handle,Windows,Performance,Handle,我知道这个问题的答案可能取决于注册表设置和Windows版本,如果内存不足,可能还取决于RAM的数量。对于这个问题,假设服务器有足够的RAM(3+GiB) 如果一个应用程序(本例中为第三方应用程序)以每小时几百个句柄的速度泄漏句柄,那么在其他应用程序遇到问题之前,该应用程序总共可以泄漏多少个句柄?我所说的“麻烦”是指,例如,无法启动线程、无法打开文件等等 我见过一些服务器(轻负载)在使用数万个句柄的进程(通常是数据库进程)的情况下运行良好,因此旧的10000个句柄限制显然不是这里的问题。(无论如

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

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

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

有人可以回答这个问题,或者给我指一些参考资料,这些资料解释了在您有效地耗尽(句柄或其他系统资源)之前,Windows服务器将允许多少个总句柄。

根据,10000。

请参阅。窗口管理器对每个进程强制执行10K的限制,整个系统的总限制为32K。因此,如果它每小时“只”泄漏100个句柄,那么在它开始出现问题之前,您有几天的正常运行时间

请注意,并非所有句柄都相等。例如,窗口句柄不是DB句柄,可能遵循不同的规则。因此,这个限制可能不适用,这取决于程序泄漏的句柄类型

The,这是一个内存池,句柄所代表的真正“东西”就存在于此有时并不取决于您分配了多少句柄,而是取决于该句柄下的每个对象使用了多少内存。您可以调试堆。这是一个需要安装的程序


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

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

从或处获取工具

命令行选项:

-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit
根据Windows 10中进程的总句柄限制,硬编码为
16*1024*1024
或16777216

由于()还存储了一些有关句柄的跟踪信息,因此64位Windows 10的实际限制为16711680,32位Windows 10的实际限制为167448:

执行器按需在页面大小的块中分配句柄表,并将这些块划分为句柄表条目。这意味着在x86和x64上都是4096字节的页面可以在32位窗口上存储512个条目,在64位窗口上存储256个条目。执行器通过将硬编码最大值16777216除以页面中的句柄项数来确定要为句柄项分配的最大页数,结果是32位窗口为32768,64位窗口为65536。因为执行人员使用每个页面的第一个条目作为自己的跟踪信息,所以流程可用的句柄数实际上是16777216减去这些数字,这解释了Testlimit获得的结果:16777216-65536是16711680,16777216-65536-32768是16744448


这似乎更像是一个服务器故障类型的问题。@Matthew Vines:我考虑过这个问题,但由于我维护的一个程序遇到了这个问题,所以我决定,即使是第三方应用程序泄露了句柄,它还是属于程序员网站的。如果我是一名管理人员,那么SF会更合适。对于哪些过程不需要担心,有一些很好的经验建议。例如,lsass.exe的最大值为30000(32位)或50000(64位)是可以的。我的任务管理器当前显示16835261个句柄(Win10,正常运行时间7天),因此
16*1024*1024
或16777216的限制似乎不正确。这些只是窗口对象句柄,不会影响其他类型的句柄(文件、事件、互斥体等)调试工具不再适用于Windows 7,我稍后会假设。在本文中,它声称每个进程最多可以达到1600万个句柄。我还注意到,在windows xp中,我的两个进程超过了10k限制。我很困惑。我猜限制在这段时间内改变了,也看到了Thomas Weller的答案。注意1024是32位窗口,实际上是32*1024*512。在64位上,它实际上是128个指针*512个指针,每页8字节*256个条目,每页16字节。