使用Python出现Too many open files的问题解决方法

使用Python出现Too many open files的问题解决方法

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

在部署Python到服务上运行一段时间后,可能会遇到文件描述符限制错误。可以通过临时或永久增加限制来解决。临时增加限制使用命令"ulimit -Sn 65535",永久增加限制需要编辑"/etc/security/limits.conf"文件。另外,可以通过修改服务的文件,在[Service]下增加"LimitNOFILE=65535"来增加单个服务的文件描述符限制。重新加载systemd配置并重启服务即可生效。

🔎

延伸解读

为什么全局限制调整后问题依旧

文章指出,即使修改了/etc/security/limits.conf,Python服务仍可能频繁报错。这是因为通过systemd管理的服务(如Gunicorn)不会继承用户级的ulimit设置,而是由服务单元文件中的LimitNOFILE参数控制。因此,仅调整全局限制可能对服务进程无效,需要单独配置服务。

临时与永久调整的适用场景

临时使用ulimit -Sn 65535可快速缓解当前会话的限制,但重启后失效;加入/etc/rc.local可实现开机自动设置,但该方法依赖于rc.local的启用。永久修改/etc/security/limits.conf需重新登录生效,适合长期调整。读者应根据是否需要持久化及系统环境选择合适方式。

验证限制是否生效的方法

调整后,可通过ulimit -a查看当前shell的限制,或使用cat /proc/<PID>/limits检查特定进程的实际限制。文章强调,若服务仍报错,应确认进程的Max open files值是否已提升。这有助于定位是配置未生效还是其他原因导致。

❓

Q&A

如何查看当前的文件描述符限制?

可以使用命令ulimit -a查看当前文件描述符限制。

如何临时增加文件描述符限制?

可以使用命令ulimit -Sn 65535临时增加文件描述符限制。

如何永久增加文件描述符限制?

需要编辑/etc/security/limits.conf文件,添加软限制和硬限制,然后注销并重新登录系统。

如何为单个服务增加文件描述符限制?

在服务的配置文件中[Service]下增加LimitNOFILE=65535,然后重新加载systemd配置并重启服务。

如果仍然出现Too many open files错误,该怎么办?

可以查看进程的文件描述符限制,确认是否已正确设置。

Ubuntu服务器默认是否设置虚拟内存?

Ubuntu服务器默认没有设置虚拟内存。

🏷️

标签

➡️

继续阅读