让我通过以下方式解决所有 ulimit -n 和 /etc/security/limits.conf 问题:我尝试将 ulimit -n 设置为 2048、4096 和 65535。我已将 nofiles 的软限制和硬限制都设置为所有这些值。ulimit -n 显示它已更改。但在运行服务器时,它仍然只能打开 1024 个套接字。accept 失败,错误号为 24(打开的连接太多)。
经过几个小时的谷歌搜索、在 #debian 中提问以及阅读 ServerFault 上的问题,我仍然没有找到解决方案。为什么 ulimit -n 会显示一个数字,但仍然被限制为 1024 个打开文件描述符?
一些可能有用的信息:该进程正在 su 中的屏幕终端上启动。是的,我已将 pam_limits.so 添加到 /etc/pam.d/su。我还将其添加到 /etc/pam.d/common-session。仍然没有运气。
答案1
没关系,事实证明问题是 ulimit -n 和 FD_SETSIZE 的组合。似乎应用程序正在使用 setrlimit 将 ulimit -n 设置为 FD_SETSIZE。我通过取消定义并将 __FD_SETSIZE 重新定义为更大的值来解决这个问题。
答案2
这个命令告诉你什么?
sysctl fs.file-max
您可以尝试:
sysctl -w fs.file-max=[bigger-number]
如果可行,则将其添加到您的/etc/sysctl.conf
文件中:
fs.file-max = [bigger-number]