Ubuntu hat einen Cron-Job eingerichtet, der alte PHP-Sessions sucht und löscht:
# 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
Mein Problem ist, dass dieser Prozess sehr lange dauert, mit viel Festplatten-IO. Hier ist mein CPU-Nutzungsdiagramm:
Die Bereinigung wird durch die blaugrünen Spitzen dargestellt. Zu Beginn des Zeitraums wurden die Bereinigungsaufträge von PHP standardmäßig zu 09 und 39 Minuten geplant. Um 15:00 Uhr habe ich die 39-minütige Zeit von cron entfernt, sodass ein Reinigungsjob, der doppelt so groß ist, halb so häufig ausgeführt wird (Sie können sehen, dass die Spitzen doppelt so breit und halb so häufig werden).
Hier sind die entsprechenden Grafiken für die E / A-Zeit:
Und Plattenoperationen:
Auf dem Höhepunkt, an dem etwa 14.000 Sitzungen aktiv waren, wird die Bereinigung 25 Minuten lang ausgeführt, wobei anscheinend 100% eines Kerns der CPU und anscheinend 100% der Festplatten-E / A für den gesamten Zeitraum verwendet werden. Warum ist es so ressourcenintensiv? Ein ls
Teil des Sitzungsverzeichnisses /var/lib/php5
benötigt nur einen Bruchteil einer Sekunde. Warum dauert es dann ganze 25 Minuten, um alte Sitzungen zu kürzen? Kann ich irgendetwas tun, um dies zu beschleunigen?
Das Dateisystem für dieses Gerät ist derzeit ext4 und läuft unter Ubuntu Precise 12.04 64-Bit.
EDIT: Ich vermute, dass die Last auf den ungewöhnlichen Prozess "Fixiereinheit" zurückzuführen ist (da ich erwarte, dass ein einfacher rm
ein verdammter Anblick schneller ist als die Leistung, die ich sehe). Ich werde die Fixiereinheit entfernen und sehen, was passiert.