• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 文件句柄限制 (或者日志文件太多)

    当使用大量虚拟主机时,如果每个虚拟主机指定不同的日志文件,则Apache可能会耗尽可用的文件描述符(有时称为文件句柄)。对于每个不同的错误日志文件,Apache使用的文件描述符总数为一个,对于每个其他日志文件伪指令,总数为10,供内部使用。Unix操作系统限制了进程可以使用的文件描述符的数量。该限制通常为64,通常可以增加到较大的硬限制。

    尽管Apache尝试根据需要增加限制,但在以下情况下可能无法使用:

    1. 您的系统不提供setrlimit()系统调用。
    2. setrlimit(RLIMIT_NOFILE)调用在您的系统上不起作用(例如Solaris 2.3)
    3. 所需的文件描述符数量超过了硬限制。
    4. 您的系统对文件描述符施加了其他限制,例如仅使用低于256的文件描述符对stdio流进行了限制。(Solaris 2)

    如果出现问题,您可以:

    • 减少日志文件的数量;不要在各<VirtualHost>节中指定日志文件,而仅登录到主日志文件。(有关执行此操作的更多信息,请参见下面的“拆分日志文件”。)
    • 如果您的系统属于1或2(以上),则在启动Apache之前使用以下脚本增加文件描述符限制:
      #!/bin/sh
      ulimit -S -n 100
      exec httpd
      

    拆分日志文件

    如果要将多个虚拟主机记录到同一日志文件,则可能需要在以后拆分日志文件,以便对各种虚拟主机进行统计分析。这可以通过以下方式实现。

    首先,您需要将虚拟主机信息添加到日志条目中。这可以使用 LogFormat伪指令和%v变量来完成。将此添加到您的日志格式字符串的开头:

    LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
    CustomLog logs/multiple_vhost_log vhost
    

    这将以通用日志格式创建一个日志文件,但是在ServerName每一行之前都添加了规范的虚拟主机(无论指令中出现什么)。(有关mod_log_config更多信息,请参见参考资料。)

    当您希望将日志文件拆分为各个组成部分(每个虚拟主机一个文件)时,可以使用该程序split-logfile来完成此操作。您可以support在Apache发行版的目录中找到该程序。

    使用以下命令运行该程序:

    split-logfile < /logs/multiple_vhost_log
    

    使用您的vhost日志文件的名称运行该程序时,它将为出现在日志文件中的每个虚拟主机生成一个文件。每个文件都会被调用hostname.log