各平台中OPEN_MAX的取值及文件描述符最大可选值咨询
各平台默认场景下OPEN_MAX的取值情况
OPEN_MAX是POSIX标准定义的进程可打开文件描述符的最小上限宏,存在于<limits.h>中,但不同操作系统的默认实现差异明显。以下是常见平台未做自定义配置的最简单场景下的默认取值:
Unix-like 主流平台
- Linux:普通用户进程的默认软限制(对应OPEN_MAX的动态实际值)通常为
1024,硬限制多为65536;部分新发行版会将软限制默认调高到4096。注意<limits.h>里的静态OPEN_MAX宏一般是保守值,实际可用上限以sysconf(_SC_OPEN_MAX)或getrlimit(RLIMIT_NOFILE)的返回结果为准。 - FreeBSD:默认软限制
1024,硬限制524288;<limits.h>中的静态OPEN_MAX宏定义为1024,但运行时可通过动态调用获取更高的可用上限。 - macOS:早期版本默认软限制为
256,Ventura及之后的新版本已提升至10240,硬限制标记为unlimited(实际受系统硬件资源约束)。静态OPEN_MAX宏一般是1024,不代表实际运行上限。 - Solaris:默认软限制
1024,硬限制65536;静态OPEN_MAX宏定义为1024,动态上限可通过sysconf或getrlimit调整。
其他类Unix平台
- AIX:默认软限制
2000,硬限制65536,<limits.h>中的静态OPEN_MAX宏直接对应默认软限制值。 - HP-UX:旧版本默认软限制为
60,新版本通常调整至1024,硬限制多为65536,静态OPEN_MAX宏对应默认软限制。
关键提示
- 静态的
OPEN_MAX宏只是POSIX要求的最低保障值,绝大多数系统的实际动态上限远高于此,生产环境中务必使用sysconf(_SC_OPEN_MAX)或getrlimit(RLIMIT_NOFILE)获取当前进程的真实可用上限,不要依赖<limits.h>的静态定义。 - 所有平台基本都支持通过系统配置(如
/etc/security/limits.conf、sysctl参数等)调整硬/软限制,上述值仅针对未做任何自定义修改的默认场景。
内容的提问来源于stack exchange,提问作者Bruno Haible
相关产品推荐
相关产品推荐

