在 Win-XP、VISTA 和 Server2003 中更改文件描述符限制和 TIME_WAIT 限制。






3.92/5 (9投票s)
本文介绍了如何通过更改 Windows 2003、XP 和 Vista 中的文件描述符 (FILE DESCRIPTOR) 限制和 TIME_WAIT 来提高服务器/系统性能。

引言
本文介绍了如何通过更改 Windows 2003、XP 和 Vista 中的 TIME_WAIT 和文件描述符限制来提高服务器/系统性能。
背景
几个月前,服务器团队突然提出需求,说我们的一个服务器和收集器写入服务行为缓慢,因为它们遇到了意想不到的大量数据,急需修复。
Using the Code
本文包含两部分:(1) 更改 TIME_WAIT 限制和 (2) 更改文件描述符限制。
更改 TIME_WAIT 限制
NETSTAT 是一个显示协议统计信息和当前 TCP/IP 网络连接的命令。运行 netstat -a 命令,您会看到各种连接状态,如 ESTABLISHED、LISTENING、CLOSE_WAIT... TIME_WAIT。TIME_WAIT 状态是指连接在关闭前等待指定时间(默认为 240 秒,即 4 分钟)的状态。如果您的服务器/系统中有大量 TIME_WAIT 状态的连接,它可能会限制最大连接数。减少此 TIME_WAIT 默认周期将增加系统的最大连接限制。要减少/修改 TIME_WAIT 默认周期,您需要修改“TcpTimedWaitDelay”注册表键的值。“TcpTimedWaitDelay
”的值决定了连接在 TIME_WAIT 状态下保持多长时间后关闭。请按照以下步骤编辑“TcpTimedWaitDelay
”设置。
Step1: Go to the Registry Key-- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters Step2: Create a new DWORD ( REG_DWORD ) value, or modify the existing value called 'TcpTimedWaitDelay' if it's already there. Step3: Set the Value between 30-300 seconds (decimal). Step4: Exit your registry, and restart the System.
更改文件描述符限制
文件描述符限制是指程序可以同时打开的文件数量的上限。Windows 在“stdio 级别”有一个硬性上限 512 个文件描述符,即任何程序在 stdio 级别一次最多可以打开 512 个文件。但是,使用 C 运行时库,Windows 的文件描述符硬上限可以扩展到 2048 个,即任何程序使用 C 运行时库的“setmaxstdio”调用最多可以同时打开 2048 个文件。
要更改文件描述符限制,应用程序可以使用“setmaxstdio”CRT 调用来更改可能同时打开的最大文件数量。附件中的应用程序 FileDescriptor.exe 使用了“setmaxstdio”调用。
应用程序FileDescriptor.exe有五个选项
- 检查您平台的/配置的默认文件描述符限制
- 此选项使您能够检查系统的默认文件描述符限制。
- 检查您平台的/配置的默认文件描述符限制,并通过同时创建相同数量的文件(不使用“setmaxstdio”调用)进行验证。
- 此选项使您能够通过同时创建和打开相同数量的文件来检查系统的默认文件描述符限制。
- 将您平台的/配置的当前文件描述符限制设置为
- 此选项使您能够使用“setmaxstdio”调用来设置系统的文件描述符限制。
- 将您平台的/配置的当前文件描述符限制设置为,并通过同时创建相同数量的文件进行验证。
- 此选项使您能够使用“setmaxstdio”调用来设置系统的文件描述符限制,并允许您同时创建和打开相同数量的文件。
更多详情请查看源代码。
如果您的应用程序需要同时打开超过 2048 个文件,那么您的应用程序应使用本地 Win32 API 调用(例如 CreateFile),而不是 C 运行时库。
- 您希望通过 WIN32 API 调用“CreateFile”同时创建和打开的文件的数量。
- 此选项使您能够使用本地 Win32 API 调用同时创建和打开文件。Microsoft 没有指定“CreateFile”WIN32 API 调用的硬性上限,所以您可以尝试尝试。我成功地一次同时创建和打开了超过 15,000 个文件。
历史
初始版本 1.0。