Temos um servidor bastante carregado executando o nginx e o PHP-FPM. Temos 6 sites neste servidor, executando PHP-FPM e nginx. O software é todo vBulletin 3.8 e WordPress. Os bancos de dados estão em um servidor separado.
Agora, como esses sites são muito populares, normalmente temos de 7 a 8.000 visitantes on-line ao mesmo tempo, com cada página atingindo o banco de dados em sua maior parte. Eu acredito que esta é a causa dos nossos problemas.
Como temos muitos bancos de dados grandes no servidor MySQL e como as consultas podem, honestamente, ser muito melhores no software, acho que o MySQL ocasionalmente falha em retornar resultados ao PHP em tempo hábil, criando um efeito em cascata que eventualmente faz com que tudo pare até recarregarmos o PHP-FPM. Depois disso, as coisas começam a funcionar bem novamente.
A razão pela qual estou tendo problemas para solucionar isso é porque realmente não consigo discernir nada dos logs. No log de consultas lentas do MySQL, não vejo nada de interessante quando ocorre o tempo de inatividade. Nos logs do nginx, vejo milhares de entradas dizendo que a solicitação de leitura atingiu o tempo limite ou a conexão atingiu o tempo limite (para PHP-FPM). E nos logs do PHP-FPM, vejo muitas linhas que dizem "tempo de execução esgotado (31 seg), terminando
Então, neste ponto, eu simplesmente não sei onde procurar o problema. Obviamente, tudo o que está acontecendo está acontecendo porque esses scripts não são executados com rapidez suficiente às vezes (normalmente eles carregam em menos de um segundo, mas algo acontece que faz com que o tempo de carregamento suba rapidamente). Isso acontece muitas vezes ao dia e se tornou um problema para nós.
Por enquanto, eu simplesmente tenho um crontab para reparar o php5-fpm a cada 10 minutos, o que resolve o problema de falha. Obviamente, quando o PHP é recarregado, o nginx gera um erro de gateway 502, por isso não é muita solução.
O PHP está executando o cache da APC, se isso importa. Li em alguns pontos que a APC pode causar interrupção em determinadas circunstâncias.
Qualquer ponteiro seria útil. Eu realmente gostaria de não ter que me preocupar com essa máquina o tempo todo.
Mais informações podem ser fornecidas, é claro. Deixe-me saber o que você precisa.
Atualização: eu apenas copiei o apc.php em uma raiz da web e o acessei para ver nossas estatísticas. As coisas pareciam boas. Em seguida, cliquei no link para acessar Estatísticas do usuário e BOOM, o servidor travou instantaneamente. Eu recarreguei o php-fpm e, em seguida, recarreguei a página de estatísticas do usuário e ela passou bem. Esperou um minuto, recarregou novamente, o servidor desligou novamente.
Então isso definitivamente parece estar relacionado à APC. A questão é - como podemos corrigi-lo?
Configuração da APC:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
Atualização 2: fizemos alguns progressos aqui. Acontece que o plug-in de cache do WordPress (W3 Total Cache) é o que estava causando as falhas. Ainda não sabemos o porquê, mas, com ele desativado, rodamos o PHP há quase 4 horas, sem recarregamentos, lentidão ou travamentos. Ainda estamos usando a APC nos fóruns do vBulletin e não há problemas. Existe alguma maneira de determinar POR QUE a APC está travando? Adoraria usá-lo em nossas instalações do WordPress, mas não à custa de um sistema frágil.