Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -
Количество ответов: 14

Уважаемые коллеги! Прошу помощи

Студенты вдруг стали жаловаться, что примерно с полуночи местного времени сайт на Moodle перестаёт быть доступным, показывает сообщение "На диске заполнен раздел, в котором хранятся данные сессий. Из-за этого сейчас невозможно войти в систему. Пожалуйста, сообщите об этом администратору сервера." - и всё, дальше идти некуда, ни продолжить работу, ни авторизоваться нельзя. Примерно через полчаса или час всё исправляется и можно работать до следующей полуночи (прям карета для Золушки). 

Вчера Томск перешёл в пояс мск+4 (был в мск+3), и "сессионный перерыв" сместился на час ночи.

Нашла два места с сессиями: в moodledata/sessions и на сервере в папке /var/lib/php5/sessions, вторая папка пустая, в первой файлы сессий есть, но их немного (то ли полторы, то ли 15 тыс. файлов), удалила все файлы старше часа - доступ к сайту не восстановился.

В phpinfo про переменные, которые (по сообщениям из Сети) отвечают за работу "чистильщика", написано:

 

DirectiveLocal ValueMaster Value
...    
...    
session.gc_divisor 1000 1000
session.gc_maxlifetime 345600 1440
session.gc_probability 1 0

Думала, может, место на сервере заканчивается, удалила запасные папки и архивы, места освободилось много, но результата никакого.

 

А у студентов, да и некоторых преподавателей, вечером самая работа. Боюсь в настройках сайта изменять часовой пояс на новый, так у них хоть до часу есть время.

Подскажите, пожалуйста, что можно сделать, куда копать.

С уважением, Людмила

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Александр Анисимов -
Изображение пользователя Майнтейнер перевода Изображение пользователя Эксперт по Moodle

По расписанию на это время ничего не запланировано? Например, создание архивных копий курсов?

В ответ на Александр Анисимов

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Да, запланировано - автоматическая архивация, на 00:00, правда, не очень понимаю, по какому времени. Сообщения о создании архивных копий приходит на почту и в 3 ночи, и в 5-6 утра.

Сайт может на это время сам "отключаться"? Или не хватает мощностей сервера?

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Vadim Tabunshchik -
Изображение пользователя Developers

А зачем вы все дни отметили?

Оставьте один любой, будут делаться резервные копии раз в неделю.

По поводу сессий: включите хранение файлов сессий в базе данных и проверьте работоспособность.

В ответ на Vadim Tabunshchik

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

А зачем вы все дни отметили?

Страшновато было, вдруг за это время преподаватель успеет создать что-то в курсе и "испортить", да и курсов тогда было совсем немного и при ручном запуске cron система, вроде, не напрягалась.

"Проредила" дни резервного копирования и перенесла на 2 часа ночи - понаблюдаю.

Вчера перенесла копирование не час ночи и пауза, судя по журналу событий, началась в 01:01 - до полпятого утра не заходили даже гости. То есть причина, похоже, всё-таки в резервном копировании - это вообще нормально? Или всё-таки что-то недонастроено? Или мощностей сервера не хватает? Или...

По поводу сессий: включите хранение файлов сессий в базе данных и проверьте работоспособность.

Вадим, какие "опасные неожиданности" могут меня подстерегать при включении хранения сессий в БД? О чём надо побеспокоиться заранее? Не случится так, что я переключу на БД, а оно потом меня не пустит, потому что сессии перестанут создаваться? Или ещё что-нибудь? (предположения скорее всего глупые, но я с сессиями знакома на чисто обывательском уровне, хотелось бы подстраховаться заранее)

Большое спасибо за ответы и советы!

С уважением, Людмила

 

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Vadim Tabunshchik -
Изображение пользователя Developers
началась в 01:01 - до полпятого утра не заходили даже гости.

Так может люди спят в это время? улыбаюсь

причина, похоже, всё-таки в резервном копировании

Только в том случае, если места не хватает. При резервном копировании файлы курса копируются в /moodledata/temp/backup, тут же создается временный архив backup.mbz, кот. потом переносится в filedir. Если этот процесс "выбирает" всё свободное место на разделе с moodledata, то файлы сессий будут создаваться нулевой длины. Отсюда проблема со входом на сайт.

какие "опасные неожиданности" могут меня подстерегать при включении хранения сессий в БД?

При включении параметра dbsessions ВСЕХ пользователей выкинет с сайта. Нужно будет заново авторизоваться. Там в пояснении к параметру всё написано.

У "правильных" админов сервера файлы БД и файлы сайта обычно хранятся на разных разделах ЖД (или вообще на разных физ. дисках). Поэтому наверняка на разделе с БД места поболее для хранения сессий и не так быстро это свободное место исчезает, как на разделе-"файлопомойке" улыбаюсь

В ответ на Vadim Tabunshchik

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Так может люди спят в это время? улыбаюсь

Люди-то спят, а вездесущий гость от поисковиков шарит по сайту день и ночь широко улыбаюсь. Из-за него даже второй график в блоке Статистика отключила - 13-20 тыс заходов в день )))

Наконец-то и он принёс пользу - теперь по нему ориентируюсь, когда сайт был недоступен ))

У "правильных" админов сервера файлы БД и файлы сайта обычно хранятся на разных разделах ЖД

Спасибо за подсказку, узнаю у нашего админа, насколько он "правильный" улыбаюсь Летом будем обновляться и если наш VPS это позволяет, разобьём диск.

Я верно понимаю, что если БД на отдельном диске, то правильнее будет хранить сессии в БД? Или вопрос только в размерах диска и хранение в файлах и в БД - равноценные варианты?

Вообще-то у нас места должно быть достаточно - свободно больше 30Гб, при этом папки Moodle и moodledata вместе с бэкапами (8Гб) занимают около 24 Гб. Или такой запас всё-таки мал?

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Если у Вас 20 тысяч заходов от ботов, возможно стоит настроить файл robots.txt и указать, чтобы роботы заходили пореже. Или вам нужно, чтобы ваш сайт был проиндекирован в поисковиках дальше главной страницы?

Каждый такой визит гостя - это новый файл сессии. Нужно проверить в настройках php и операционной системы, как часто чистятся сессии php и какое количество файлов реально в папке с сессиями. Если набирается порядка 10000 - это симптом проблем. В ubuntu, например, за чистку сессий отвечает /etc/cron.d/php5 и /usr/lib/php5/sessionclean. Если у вас другая система, то может быть просто нет аналогичного скрипта отвечающего за чистку.

В линуксе в файловой системе есть особая область inode отвечающая за информацию о файлах. И если в системе много мелких файлов, а это как раз относится к файлам сессий, то бывает, что inode заканчивается быстрее, чем место на диске. И хотя диагностика показывает, что место на диске ещё есть, создавать новые файлы не удается с ошибкой, что недостаточно места на диске. Конечно, во всех таких случаях поможет включение хранения сессий в БД, но возможно, это лечение симптомов, а не основной проблемы.

Если у вас VPS, то значит все ваши данные хранятся на одном физическом рейд-массиве, и значит скорость доступа к ним будет одинаковая, независимо от того, сделаете вы несколько виртуальных жёстких дисков или один. То же самое относится к созданию нескольких разделов на одном физическом диске. С точки зрения производительности это не даст никакого прироста. Бьют на разделы обычно из неких иных соображений.

В ответ на Vadim Dvorovenko

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Вадим, спасибо большое за подсказки. Про robots.txt как-то не подумала, сейчас записала в него 

User-agent: *
Disallow: /

и поместила в папку рядом с config.php - думаю, это и есть корневая папка сайта )). Посмотрела журнал событий - гости заходят. Этот "запрет" срабатывает не сразу? Понаблюдаю пару дней...

В папке с сессиями (moodledata/sessions) порядка 3250 файлов (пока писала, их стало 3280). "Возраст" самого старого файла почти 21 час - это нормально?

ОС на сервере Ubuntu, файлы /etc/cron.d/php5 и /usr/lib/php5/sessionclean есть, в первом записана, кроме комментариев, вот такая строчка: 09,39 *     * * *     root   [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean, а второй содержит код, в котором мне знакомы только if, for и while в думах

Вадим, подскажите, пожалуйста, как узнать, насколько часто чистятся сессии?

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Vadim Tabunshchik -
Изображение пользователя Developers
Про robots.txt как-то не подумала, сейчас записала в него 

А про эту тему не вспомнили? В ней мы уже обсуждали входы гостя.

Посмотрите, у вас сайт открыт для Google (opentogoogle) или нет. Если включено, может имеет смысл отключить? У меня отключено и никаких неудобств не замечаю улыбаюсь

В ответ на Vadim Tabunshchik

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Как не помнить улыбаюсь Я там и узнала, сколько к нам "поисковых гостей" заходит. Параметр opentogoogle у нас отключен. 

В блоке Статистика я тогда отключила график общего числа подключений, результат меня устроил, я и успокоилась.

 

Гостевой вход отключать не хочется - у меня много открытых курсов.

 

Сейчас перенесла резервное копирование на 2 ночи, оставила только три дня в неделю - проблема уже не так остра, понаблюдаю, поэкспериментирую. Результаты буду сюда выкладывать - вдруг кому-нибудь ещё пригодится улыбаюсь

Спасибо большое за помощь!

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Александр Анисимов -
Изображение пользователя Майнтейнер перевода Изображение пользователя Эксперт по Moodle

Из справки:

Если Вы используете MySQL (при хранении файлов сессий в базе данных ), то, убедитесь, что 'max_allowed_packet' в my.cnf (или my.ini) - по крайней мере 4M.

В ответ на Александр Анисимов

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Спасибо, Александр!

Нашла такой файл в папке /etc/mysql/, max_allowed_packet= 16M

А где-то в самом Moodle этот параметр посмотреть можно? Как, например, phpinfo смотрим.

В ответ на Людмила Татарникова

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Смотрите, мудл построен по трехуровневой архитектуре: клиент - сервер приложений (php) - база данных. Построение приложений по такой архитектуре изначально предполагает, что сервер баз данных может быть вынесен в отдельный сервер, который может делать даже сложные запросы к базе данных очень быстро, но время передачи с сервера базы данных на сервер приложений может быть существенно дольше любых процессов на самом сервере приложений. Поэтому разработчики мудл при разработке сложных компонентов системы всегда считают количество запросов к базе данных и стараются сделать как можно меньше, но более сложных запросов. Ведь каждый дополнительный запрос, даже простой, это дополнительное время ожидания ответа. Для повышения производительности является кэш - из тех же соображений его стараются всегда разместить как можно ближе к серверу приложений - или в оперативной памяти или на диске, даже не в очень эффективной форме, например закодировнным в json. Взять json файл с диска на сервере приложений и преобразовать его в нужную структуру оказывается куда быстрее, чем ждать ответа от сервера базы данных.

То же самое относится и к сессиям. Хранить сессии в файле на диске на сервере приложений - быстрее. Но если у вас кластер серверов и клиент может перепрыгивать с одного сервера приложений на другой  в кластере без обрыва сессий, сессии приходится хранить в базе данных. Кроме того, в базе данных проще выискивать и удалять устаревшие сессии, а хранение сессий в файловой системе может превратиться в проблему, если в одной папке накапливается больше 10000 файлов сессий. А такое может произойти, если неправильно настроена очистка устаревших сессий в php. У нас из-за такого как-то падала joomla, и на очистку папки сессий уходило несколько часов.

Так вот к чему это я всё. Если у вас база данных и php находятся на одной машине, то всё, о чём я говорил выше, перестаёт иметь какое-либо значение. Диск один и тот же, поэтому забрать сессию из файла и сервера бд можно практически с одинаковой скоростью. Поэтому смело переключайтесь на хранение сессии в базе данных и сравнивайте

В ответ на Vadim Dvorovenko

Re: Раздел, в котором хранятся данные сессий - не переполнен, но Moodle ругается

от Людмила Татарникова -

Вадим, спасибо большое за подобные теоретические экскурсы. Интересно, и в этой конкретной маленькой задаче всё понятно улыбаюсь