gpt4 book ai didi

linux - 如何解决 Linux 上的 "too many open files"错误?

转载 作者:太空狗 更新时间:2023-10-29 11:45:49 24 4
gpt4 key购买 nike

我在为 Linux(某种服务器)编写的程序中遇到了一些问题,出现了臭名昭著的“打开的文件太多”错误。

一直以为是socket的问题,后来查了下发现线程在linux眼里也是"file"。

那么,套接字和/或线程是否也需要文件描述符?

最佳答案

在典型的 UNIX 或类 UNIX 系统中,以下内容由文件描述符表示,并且从用户的角度来看也是如此(就您可以使用的功能而言):文件、管道、套接字(类似 UNIX 和网络套接字)、字符设备、 block 设备。

无论是从用户的角度还是在内核中,线程和进程都不会被识别为文件。

问题是在某些系统中,最低限制太低;因此要将系统范围(实际上是用户或组范围)的更改设置为进程可以打开的上限;修改文件/etc/security/limits.conf并添加以下行:
user_name(软|硬)nofile(some_number_that_specifies_the_limit)

当然,正如已经提到的,这可以在代码中使用函数设置调用进程打开的最大文件数setrlimit来完成。

请注意,对任何资源设置硬限制都需要 root 访问权限,而使用命令 ulimit 或代码中的函数设置软限制通常达不到允许的硬限制。

关于您对线程的评论:创建太多线程可能会导致失败,因为您可以生成的线程或进程数量有限,您会看到例如 fork 将 errno 设置为 EAGAIN 失败如果它不能得到一个新的进程;与文件限制一样,这可以使用 setrlimit 函数进行更改。

但是请注意,创建太多线程与错误“太多打开的文件”无关。

关于linux - 如何解决 Linux 上的 "too many open files"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com