我在 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”。它可能已经达到最大打开文件数限制。