opium
@opium
Просто люблю качественно работать

Очистка php сессий в ubuntu и debian

Debian я так понимаю пошел своим путем и для очистки сесий использует скрипт из крона который, чистит файлы со старыми php сессиями.
Выглядит этот скрипт вот так

32093? Ss 0:00 /bin/sh -c [ -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
32098? S 1:54 find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +24! -execdir fuser -s {}; -delete

Большая проблема что он сильно грузит винт я решил перенесом каталога с сессиями в память через tmpfs

Но появилась вторая проблема, скрипт не успевает отрабатывать удаление файлов и запускается снова, в моменты когда сессий очень много запускается несколько десятков скриптов на очистку сессий и они съедают весь процессор.

Есть какие то стандартные пути решения этой проблемы?

версия ubuntu 12.04, php стандартный из репозитория.
  • Вопрос задан
  • 9919 просмотров
Пригласить эксперта
Ответы на вопрос 7
Melkij
@Melkij
PostgreSQL DBA
Сессий очень много — это сколько?
Может, имеет смысл их в memcache пихать? Или хотя бы партицирование по директориям включить (см. описание настройки www.php.net/manual/en/session.configuration.php#ini.session.save-path )?
Ответ написан
Комментировать
@alexeysilver
Мы храним сессии в redis, не нашел причин считать это плохим вариантом. Но в Вашем случае я бы просто уменьшил время запуска скрипта, и тогда скрипты бы не пересекались.
Ответ написан
kemko
@kemko
Самый простой вариант — перед началом проверки проверять, есть ли в /tmp некий файл, если есть — остановиться, если отсутствует — создать его, вычистить старые сессии и затем удалить его.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.

Да, есть. Называется flock.

Использовать примерно так в кроне: 0 0 * * * root flock -n /tmp/somefile.lock "somecsript.sh"

Второй запуск команды flock -n /tmp/somefile.lock "somecsript.sh" уже не случится до тех пор, пока первый инстанс работает.

В somescript.sh, соответственно, пихаете всё то, что запускается у вас сейчас (chmod +x на скрипт не забудьте).

Ответ написан
Комментировать
@impass
Если файлов сессий создаётся слишком много, может пора как-то оптимизировать ваше приложение, и не создавать сессию для каждого приходящего пользователя независимо от того, нужна она или нет?
Ответ написан
Комментировать
@max_rip
Да сколько у вас сессий?
Если у вас на машине несколько проектов и они не связаны между собой, может имеет смысл раскидать их по разным каталогам, да и как часто вы запускаете проверку?
Ответ написан
alexkbs
@alexkbs
Стоит научить приложения не стартовать сессии когда они не нужны.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽