当我执行 ulimit -n 时,我得到了 256,我假设这意味着我可以同时打开 256 个文件。这是否意味着我可以用一个会话打开 256 个文件?还是所有会话?
例如,我使用用户名“abc”(通过 putty/ssh)登录到我的服务器,并打开了 200 个文件,会话仍在运行,我再次使用相同的用户名“abc”(通过 putty/ssh)登录到同一台服务器,我只能打开另外 56 个文件?或者我可以打开另外 256 个文件?
最后,这个限制是否也限制了 http 连接的数量?例如,在上面的例子中,我打开了 200 个文件,然后我使用“wget”或“curl”建立 http 连接。
谢谢
答案1
ulimit
是 bash 的内置命令,因此它仅适用于 shell,特别是当前 shell 创建的任何进程。因此,如果您出于任何原因更改它,则必须以持久的方式进行更改。
您可能需要检出/etc/security/limits.conf
针对每个用户设置会话限制的文件。(这似乎是 CentOS 首选的方法)
lsof -P | grep $somepid
您可以使用命令查看打开的文件
答案2
Linux 系统限制每个进程打开的文件描述符的数量。
如果您使用带有预分叉 MPM 的 Apache,那么 256 对于大多数网站来说似乎已经足够了。
要增加限制,您需要添加一行以/etc/security/limits.conf
允许某些用户或组的进程增加默认值。之后,PAM 将在您登录时将其设置为最大值。但这对于 Apache 来说还不够,因为它不“登录”。
您还需要在启动 Apache 之前增加此值。在 CentOS 中,您可以编辑 /etc/init.d/apache2 脚本并将其放入ulimit -n XXXXXX
start() 函数的开头。
您可以检查文件中正在运行的进程的限制/proc/<PID>/limits
,打开的文件描述符列表位于/proc/<PID>/fd/