当没有更多可用工作人员时,是否有办法以某种方式进行 httpd 记录?
例如,它可以记录工人不可用的日期和时间,并在工人再次可用时再次记录。
该日志将用于分析容量需求。
答案1
由于我们都找不到有关server reached MaxRequestWorkers setting
日志条目的任何文档,而且我确信它们在那里(过去曾遇到过),所以我自己尝试了一下。以下是我复制消息所采取的步骤:
mpm 预分叉
# lxc launch ubuntu:16.04 test
# lxc exec test /bin/bash
# apt-get update ; apt-get -y install apache2
# a2enmod mpm_prefork
# cat >/etc/apache2/mods-available/mpm_prefork.conf <<EOF
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
MaxRequestWorkers 5
MaxConnectionsPerChild 0
</IfModule>
EOF
# service apache2 restart
# apt-get install wrk
# wrk -d 60 -c 10 -t 10 http://localhost
现在看一下 /var/log/apache2/error.log - 您应该看到类似这样的一行:
[Fri Jul 29 20:59:18.304444 2016] [mpm_prefork:error] [pid 5419] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
我猜测错误消息的具体措辞取决于所使用的 mpm 以及服务器首先达到的限制。
mpm 事件
因此我也尝试了事件 mpm:
# a2dismod mpm_prefork
# a2enmod mpm_event
# cat >/etc/apache2/mods-available/mpm_event.conf <<EOF
<IfModule mpm_event_module>
StartServers 1
MinSpareThreads 1
MaxSpareThreads 2
ThreadLimit 2
ThreadsPerChild 2
MaxRequestWorkers 5
MaxConnectionsPerChild 0
</IfModule>
EOF
# service apache2 restart
# wrk -d 10 -c 50 -t 50 http://localhost
瞧瞧:
[Fri Jul 29 21:06:57.148442 2016] [mpm_event:error] [pid 5643:tid 139946523182976] AH00484: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
mpm 工作者
# a2dismod mpm_event
# a2enmod mpm_worker
# cat >/etc/apache2/mods-available/mpm_event.conf <<EOF
<IfModule mpm_worker_module>
StartServers 1
MinSpareThreads 1
MaxSpareThreads 2
ThreadLimit 2
ThreadsPerChild 2
MaxRequestWorkers 5
MaxConnectionsPerChild 0
</IfModule>
EOF
# service apache2 restart
# wrk -d 10 -c 50 -t 50 http://localhost
# tail -1 /var/log/apache2/error.log
[Fri Jul 29 21:11:20.033223 2016] [mpm_worker:error] [pid 5805:tid 140034844882816] AH00287: server is within MinSpareThreads of MaxRequestWorkers, consider raising the MaxRequestWorkers setting
结论
我们没有找到相关文档,但可以肯定它确实存在:如果达到该MaxRequestWorkers
设置,httpd2.4 会通知您。
不过,您需要密切关注 error.log,因为每次达到限制时,此消息不会重复出现。不确定它是否会在定义的时间段后重复出现,但您肯定会在 httpd2.4 重新启动后收到通知