Ubuntu ma skonfigurowane zadanie cron, które wyszukuje i usuwa stare sesje 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
Mój problem polega na tym, że proces ten trwa bardzo długo, z dużą ilością operacji we / wy dysku. Oto wykres wykorzystania mojego procesora:
Przebieg czyszczenia jest reprezentowany przez kolce turkusowe. Na początku tego okresu zadania czyszczenia PHP były zaplanowane domyślnie 09 i 39 minut. O 15:00 usunąłem 39-minutowy czas z crona, więc zadanie czyszczenia dwa razy większe przebiega w połowie tak często (widać, że szczyty robią się dwa razy szersze, a połowa tak częste).
Oto odpowiednie wykresy dla czasu IO:
I operacje dyskowe:
W szczycie, w którym było aktywnych około 14 000 sesji, czyszczenie może trwać przez pełne 25 minut, najwyraźniej wykorzystując 100% jednego rdzenia procesora i co najwyżej 100% IO dysku przez cały okres. Dlaczego zajmuje tak dużo zasobów? ls
Katalogu sesji /var/lib/php5
trwa zaledwie ułamek sekundy. Dlaczego więc przycinanie starych sesji zajmuje całe 25 minut? Czy mogę coś zrobić, aby to przyspieszyć?
System plików dla tego urządzenia to obecnie ext4, działający na Ubuntu Precise 12.04 64-bit.
EDYCJA: Podejrzewam, że obciążenie jest spowodowane niezwykłym procesem „utrwalacza” (ponieważ spodziewam się, że prosty rm
będzie cholernie szybszy niż wydajność, którą widzę). Usunę użycie utrwalacza i zobaczę, co się stanie.