У 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
буде проклятим видовищем швидше, ніж продуктивність, яку я бачу). Я збираюся зняти використання термозапчастин і подивитися, що станеться.