Edd*_*die 11 windows performance handle
我知道这个问题的答案可能取决于注册表设置和Windows版本,如果没有足够的内存,可能取决于RAM的数量.为了这个问题,假设服务器有足够的RAM(3 + GiB).
如果应用程序(在这种情况下是第三方应用程序)以几百小时的时间泄漏句柄,那么在其他应用程序遇到问题之前,该应用程序可以泄漏多少总句柄?"麻烦"我的意思是,例如,无法启动线程,无法打开文件,等等.
我已经看到一些服务器(轻载)运行得很好用一个进程(通常是一个数据库进程)使用几万个句柄,所以旧的10000句柄限制显然不是这里的问题.(无论如何,这是一个每个进程的限制,因此不会影响我的应用程序,在这一点下.)
有人可以回答这个问题,还是指出一些资源,解释一下Windows服务器在你有效用完(句柄或其他系统资源)之前将允许多少总句柄?
JSB*_*ոգչ 17
请参阅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
Run Code Online (Sandbox Code Playgroud)
根据最近的这篇博客文章,Windows 10 中进程的总句柄限制被硬编码为16*1024*1024或16,777,216。
随着视窗执行(见也在这里)还存储处理一些跟踪信息,实际限制是16711680的64位Windows 10和16744448的32位Windows 10:
执行程序根据需要在页面大小的块中分配句柄表,并将其划分为句柄表条目。这意味着一个页面,在 x86 和 x64 上都是 4096 字节,在 32 位 Windows 上可以存储 512 个条目,在 64 位 Windows 上可以存储 256 个条目。执行程序通过将硬编码的最大值 16,777,216 除以页面中的句柄条目数来确定为句柄条目分配的最大页数,结果在 32 位 Windows 上为 32,768,在 64 位 Windows 上为 65,536 . 因为Executive使用每个页面的第一个条目作为它自己的跟踪信息,一个进程可用的句柄数量实际上是16,777,216减去这些数字,这就解释了Testlimit获得的结果:16,777,216-65,536是16,711,680和16,777,216-832,65是 16,744,448。
| 归档时间: |
|
| 查看次数: |
36936 次 |
| 最近记录: |