Apache 崩溃;“系统中打开的文件过多”

Apache 崩溃;“系统中打开的文件过多”

我在 MediaTemple (dv) 服务器上运行带有 mpm_prefork 的 Apache2。最近我的服务器配置没有发生重大变化。httpd.conf 当前设置为以下内容:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

但是在 Apache 完全崩溃之前,我收到了以下错误:

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

当 Apache 崩溃时,我非常恼火地要照看这台服务器并重新启动它。帮忙吗?

答案1

我建议你尝试添加这样的一行ulimit -n 16384到文件顶部 /等/默认/apache2然后重新启动。

另请参阅关联

答案2

来自‘man proc’:

/proc/sys/fs/文件最大值 此文件定义了系统范围内所有进程打开文件数量的限制。(另请参阅 setrlimit(2),进程可以使用它来设置每个进程可以打开的文件数量的限制 RLIMIT_NOFILE。)如果您收到大量有关文件句柄不足的错误消息,请尝试增加此值:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

可以放置在 file-max 中的值。

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

将 /proc/sys/fs/inode-max 增加到 /proc/sys/fs/file-max 新值的 3-4 倍,否则您将耗尽 inode。

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

当前打开的文件句柄数。它包含三个数字:已分配的文件句柄数;可用文件句柄数;以及最大文件句柄数。内核动态分配文件句柄,但不会再次释放它们。如果已分配的文件数接近最大值,则应考虑增加最大值。当可用文件句柄数很大时,您已经遇到了文件句柄使用量的峰值,您可能不需要增加最大值。

第二个数字值得一看,看看第一个数字是否是您需要增加的。如果是,您可以在 /etc/sysctl.conf 中使用以下命令进行设置:

fs.file-max=512000

请注意,这将设置系统限制;每个用户的限制是用“ulimit”设置的,您已经表明您熟悉它。

答案3

检查 lsof 以查看实际发生了什么。超出不合理的高限制通常是由于泄漏或其他错误造成的。

答案4

尝试在启动 apache 之前运行“ulimit -n 8192”。它可能已经达到最大打开文件数限制。

相关内容