O Ubuntu possui um trabalho cron configurado para procurar e excluir sessões antigas do PHP:
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] \
&& [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 \
-maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir \
fuser -s {} 2> /dev/null \; -delete
Meu problema é que esse processo está demorando muito tempo para ser executado, com muitas E / S de disco. Aqui está o meu gráfico de uso da CPU:
A execução da limpeza é representada pelos pontos da cerceta. No início do período, os trabalhos de limpeza do PHP eram agendados nos horários padrão de 09 e 39 minutos. Às 15:00, removi o tempo de 39 minutos do cron, portanto, um trabalho de limpeza com o dobro do tamanho é executado com metade da frequência (você pode ver os picos obterem o dobro da largura e a metade da frequência).
Aqui estão os gráficos correspondentes para o tempo de IO:
E operações de disco:
No pico em que havia cerca de 14.000 sessões ativas, a limpeza pode ser executada por 25 minutos, aparentemente usando 100% de um núcleo da CPU e o que parece ser 100% da E / S do disco durante todo o período. Por que é tão intensivo em recursos? Um ls
diretório da sessão /var/lib/php5
leva apenas uma fração de segundo. Então, por que são necessários 25 minutos para aparar as sessões antigas? Há algo que eu possa fazer para acelerar isso?
O sistema de arquivos deste dispositivo está atualmente ext4, sendo executado no Ubuntu Precise 12.04 de 64 bits.
Edição: Eu suspeito que a carga é devido ao processo incomum "fusor" (desde que eu espero que um simples rm
seja uma visão muito mais rápida do que o desempenho que estou vendo). Vou remover o uso do fusor e ver o que acontece.