Servidor Apache O Debian Linux x64 serve as aplicações mono do site em mysite.com e outros sites usando hospedagem virtual.
Às vezes, o apache pára de responder por um motivo desconhecido. Apache error_log contém:
[Sat Jun 20 13:56:31 2015] [error] [client 90.190.33.164] File does not exist: /var/www/apple-touch-
icon.png
[Sat Jun 20 16:38:04 2015] [error] server reached MaxClients setting, consider raising the MaxClients setting
[Sat Jun 20 17:20:11 2015] [notice] caught SIGTERM, shutting down
mod-mono-server received a shutdown message
[Tue Jun 23 09:20:50 2015] [error] mod_mono: connect error (Interrupted system call). File: /tmp/mod
_mono_server_default
mod-mono-server received a shutdown message
mod-mono-server received a shutdown message
mod-mono-server received a shutdown message
[Tue Jun 23 09:20:54 2015] [error] Not running mod-mono-server.exe because no MonoApplications, Mono
ApplicationsConfigFile or MonoApplicationConfigDir specified.
[Tue Jun 23 09:20:54 2015] [notice] Apache/2.2.16 (Debian) mod_mono/2.6.3 configured -- resuming normal operations
..
Parece que
[Sat Jun 20 16:38:04 2015] [error] server reached MaxClients setting, consider raising the MaxClients setting
A mensagem
no arquivo de log aparece primeiro.
Depois disso, provavelmente a tarefa cron tenta abaixo reiniciar o apache, o que causa uma mensagem no error_log:
[Sat Jun 20 17:20:11 2015] [notice] caught SIGTERM, shutting down
mod-mono-server received a shutdown message
O servidor estava inativo a partir deste momento: access_log não registra nenhum acesso a partir de 20 de junho de 17:20
O servidor começa a pesquisar novamente somente em [Tue Jun 23 09:20:50 2015] quando eu reiniciei manualmente.
Isso começa a ocorrer a partir do mês passado várias vezes por mês.
Para corrigir isso, o seguinte script crontab é usado em execução a cada 10 minutos:
wget --timeout=10 --no-verbose --tries=1 -a /var/log/wget.log -O /var/log/wgettulem.html mysite.com || /etc/init.d/apache2 restart
Se o apache parar de responder, o arquivo de log gravado por esse script conterá
Connection timed out
mensagens de erro.
No entanto, o apache não é reiniciado.
Tentando reiniciá-lo manualmente usando
/etc/init.d/apache2 restart
retorna o Sockect está em erro de uso. ps aux mostra que o apace ainda está em execução.
Eu corrijo isso usando
ps aux | grpe apache
para encontrar o número do processo do appache e usar
kill
para matar este processo.
Como consertar ou encontrar o reson dessa mensagem?
Como automatizar esse processo para que todas as instâncias do apache sejam eliminadas e o apache seja reiniciado automaticamente por esse script. Como existe uma maneira de manter o apache respondendo?
A versão Debian é 6.0.4
apache2 -V retorna
Server version: Apache/2.2.16 (Debian)
Server built: Feb 5 2012 21:35:42
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
o apache2.conf contém
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>