У Ubuntu створена робота з кроном, яка шукає та видаляє старі сеанси 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
Моя проблема полягає в тому, що цей процес займає дуже багато часу, з великою кількістю дискового вводу. Ось мій графік використання процесора:

Проведення очищення представлено слізними шипами. На початок періоду завдання очищення PHP були заплановані за замовчуванням 09 та 39 хвилин. О 15:00 я зняв 39-хвилинний час з крона, тому робота з очищення вдвічі менша за розміри вдвічі частіше (ви можете бачити, що вершини стають удвічі ширшими та наполовину частішими).
Ось відповідні графіки для IO часу:

І дискові операції:

На піку, коли було активним близько 14000 сеансів, очищення можна побачити протягом повних 25 хвилин, мабуть, використовуючи 100% одного ядра центрального процесора і те, що, здається, становить 100% дискового вводу протягом всього періоду. Чому це так ресурсомістко? lsКаталогу сеансу /var/lib/php5займає всього частку секунди. То чому для обрізки старих сеансів потрібно цілих 25 хвилин? Чи можна щось зробити, щоб прискорити це?
Файлова система цього пристрою наразі ext4, працює на 64-розрядній версії Ubuntu Precision 12.04.
EDIT: Я підозрюю, що навантаження пов'язана з незвичним процесом «термозахисного пристрою» (оскільки я очікую, що простий rmбуде проклятим видовищем швидше, ніж продуктивність, яку я бачу). Я збираюся зняти використання термозапчастин і подивитися, що станеться.


