配置未生效
您可能已经尝试过修改系统或特定用户的文件描述符限制,如编辑 /etc/security/limits.conf 或 /etc/systemd/system.conf 文件,增加了 DefaultLimitNOFILE 参数的值。但如果没有正确应用这些更改,或者没有重启相应的服务以使新配置生效,系统仍然会使用旧的默认值。确保您在修改配置后执行了以下操作之一:
系统重启:重启整个系统可以确保新的系统级配置在整个系统启动时被加载。
重启 systemd:如果不想重启整个系统,可以尝试重启 systemd 以加载新的配置。这通常通过执行 systemctl daemon-reload 命令实现。
重启服务:针对某个具体服务,即使系统全局配置已更新,也需要重启该服务以使其遵循新的限制,例如 systemctl restart your-service-name.service。
用户与服务账户权限:
如果服务以非 root 用户身份运行,并且您仅在 root 用户或某个其他用户配置文件中调整了最大文件描述符限制,那么该服务所使用的用户账户可能仍受其自身用户配置文件中较低的限制约束。请确保在相应服务运行账户的配置文件(如 /etc/security/limits.d/ 目录下的特定用户或组配置文件)中也设置了适当的限制。
服务自身的配置覆盖:
有些服务可能会在其自身的 systemd unit 文件(.service 文件)中显式设置资源限制,这会覆盖系统级别的默认限制。检查服务的 unit 文件(通常位于 /lib/systemd/system/ 或 /etc/systemd/system/),看是否存在类似 LimitNOFILE= 的行,如果有且值设为 4096,则需要将其修改为期望的更高值。
临时 shell 会话限制:
如果您使用 ulimit 命令在终端中临时调整了文件描述符限制,这只是影响当前 shell 会话,不会持久化到服务启动时的环境。要永久更改限制,应通过上述系统或用户配置文件进行。
内核限制:
虽然不太常见,但某些较老的内核版本或特定内核配置可能对最大文件描述符数量有硬性限制。确认您的内核版本是否支持您想要设置的较高值,并检查内核编译选项是否有相关限制。