我有一个一次运行10000个线程的应用程序。每个线程打开相同的文件。问题是每当我使用10K线程启动应用程序时,应用程序在创建500个线程(文件句柄)后终止。我在Linux上尝试了相同的应用程序,并在调整 ulimit 选项后运行正常。对于进程可以在Windows中打开的文件句柄是否有任何限制?我一直在谷歌搜索,我得到的是更改 C \ Windows \ System32 ... 中 config.nt 文件中的条目。
但我发现64位操作系统不存在所述文件。有什么方法可以在Windows中更改限制吗?
我的操作系统是WINDOWS 7 64位。
答案 0 :(得分:5)
要查看应用程序在给定时间打开的句柄总数(不仅仅是文件句柄):只是为了确保它是句柄限制。
从https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx下载Process Explorer 确保设置适当的刷新速度。 打开它然后转到View - >选择列 - >按“处理性能”选项卡,然后单击“处理计数”。
对于Windows 7 x64位,进程可以同时打开16.711.680个句柄。 如果您想查看自己的限制,请阅读以下内容。 使用Windows Internals Book(https://technet.microsoft.com/en-us/sysinternals/bb963901.aspx)中的工具检查一下。工具的名称是TestLimit,您可以在Book Tools标题下的页面下部找到它。
据我所知,没有办法增加Windows操作系统的限制,我也看了。
正如其他人所说,想想一种最小化大量线程的方法。 也许您的应用程序关闭文件,但不关闭句柄。 我的建议,如果你真的需要使用非常大的句柄数,每次句柄数约为16米时都会启动一个新进程。
答案 1 :(得分:0)
用尽Microsoft C运行时库文件描述符(Harry Johnston)似乎是正确的诊断。 https://docs.microsoft.com/en-us/cpp/c-runtime-library/file-handling。默认最大值为512个打开文件描述符。因此,解决方案是在main的早期编写一行代码:
_setmaxstdio(newmax);
如何在Python中做到这一点是另一个问题。