Ubuntu tiene un trabajo cron configurado que busca y elimina sesiones PHP antiguas:
# 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
Mi problema es que este proceso está tardando mucho en ejecutarse, con mucho disco IO. Aquí está mi gráfico de uso de CPU:
La limpieza en ejecución está representada por las espigas verde azulado. Al comienzo del período, los trabajos de limpieza de PHP se programaron en los tiempos predeterminados de 09 y 39 minutos. A las 15:00, eliminé el tiempo de 39 minutos de cron, por lo que un trabajo de limpieza del doble del tamaño se ejecuta la mitad de las veces (puede ver que los picos se doblan el doble y la mitad de la frecuencia).
Aquí están los gráficos correspondientes para el tiempo IO:
Y operaciones de disco:
En el pico donde había aproximadamente 14,000 sesiones activas, se puede ver que la limpieza se ejecuta durante 25 minutos completos, aparentemente usando el 100% de un núcleo de la CPU y lo que parece ser el 100% del disco IO durante todo el período. ¿Por qué es tan intensivo en recursos? Una ls
de las sesiones del directorio /var/lib/php5
toma solo una fracción de segundo. Entonces, ¿por qué se tarda 25 minutos completos en recortar las sesiones antiguas? ¿Hay algo que pueda hacer para acelerar esto?
El sistema de archivos para este dispositivo es actualmente ext4, ejecutándose en Ubuntu Precise 12.04 de 64 bits.
EDITAR: sospecho que la carga se debe al proceso inusual "fusor" (ya que espero que un simple rm
sea mucho más rápido que el rendimiento que estoy viendo). Voy a eliminar el uso del fusor y ver qué pasa.