为什么我会过早达到文件数量限制?

1 linux socket ulimit

在我们的开发系统之一(Ubuntu 21.10 桌面)上运行的自定义应用程序因错误而崩溃socket: Too many open files。所以我立即检查了限制。这是输出:

$ ulimit -n
65535
Run Code Online (Sandbox Code Playgroud)

现在这很奇怪的原因是应用程序在崩溃时仅使用 1019 个套接字。鉴于可能还有其他一些文件描述符打开,我认为它达到了 1024 的限制。

为什么桌面ulimit -n明确表示限制是 65535 却强加 1024 限制?

只是为了让这件事变得更加奇怪。我有两个应用程序。一个epoll基于网络抓取工具和一个PACKET_MMAP基于应用程序,该应用程序SYN向多个网络服务器发送消息以启动连接。该epoll应用程序不会崩溃,但使用的套接字数量远多于 1024 个。而使用原始套接字的基础应用程序却PACKET_MMAP崩溃了。

此外,在服务器(也运行 Ubuntu)上测试的相同应用程序不会崩溃。

因此,无论问题是什么,它都是特定于桌面和原始套接字应用程序的。

编辑:

cat /proc/pid/limits按要求输出:

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             31106                31106                processes 
Max open files            1024                 1048576              files     
Max locked memory         1025802240           1025802240           bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       31106                31106                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us  
Run Code Online (Sandbox Code Playgroud)

输出显示最大打开文件的软限制实际上是 1024,这与ulimit -n. 是什么赋予了?

Ale*_*exD 5

对于不同的用户和不同的进程可以设置不同的资源限制。您ulimit显示特定用户的特定限制,但systemd有其自己的默认限制。您需要更新systemd程序的单元文件以设置文件限制LimitNOFILE=1048576

详细信息请参阅文档