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
Стоит научить приложения не стартовать сессии когда они не нужны.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы