Я выступаю в качестве системного администратора на нескольких серверах, которые содержат сайты Magento, и иногда они заполняются файлами сессий.
Мне сказали, что управлять этими файлами нельзя из-за Magento, и я предполагаю, что их временное использование означает, что их нельзя просто отключить, но кажется странным, что Magento не может справиться с удалением этих файлов. файлы?
Мое решение - ночной crontab, который выполняет что-то вроде этого, find /path/to/magento/sessions/ -name "sess*" -type f -delete
но, по меньшей мере, чувствует себя не элегантно.
Каков наилучший способ справиться с этим?
В случае файловых сессий они автоматически удаляются с помощью cron для очистки сессий PHP, поэтому файлы могут быть удалены в течение ~ 7200 секунд после создания. Таким образом, даже на загруженном сайте (30 тыс. Уникальных устройств в день) в каталоге ./var/session обычно содержится только около 4000 файлов сессий, что не годится даже для низкоуровневого Linux-сервера.
Тем не менее, очистка на самом деле зависит от работы cron, которая обычно не выглядит в каталоге ./var/session Magento. Таким образом, вы должны установить новую систему Cron
Период очистки по умолчанию для сеансов составляет 7200 секунд, что должно быть более чем достаточным, хотя вы можете изменить приведенное выше в соответствии с требованиями.
В сеансах Memcache TCP / IP - это единственные издержки, которые при развертывании с одним сервером замедляют работу по сравнению с файлами. Таким образом, вместо этого вы бы использовали сокет Unix, который устраняет эти издержки и повышает безопасность. Но даже при этом ваши сеансы клиентов будут сокращены / ограничены в зависимости от объема ОЗУ, которое вы можете выделить. Средний сеанс Magento составляет 4 КБ, поэтому вы сможете поддерживать 256 активных сеансов на каждый выделенный МБ. Поэтому не забудьте установить соответствующий лимит, чтобы клиенты не теряли случайно корзину / сессию. Также имейте в виду, что перезапуск демона Memcache уничтожит все существующие сеансы (ПЛОХО!).
С Redis (не нативным, но доступным через расширение) вы получаете уровень поддержки, аналогичный Memcache, но с дополнительными преимуществами постоянства (если вы захотите его использовать). С расширением Cm_Redis вы также сможете воспользоваться преимуществами сжатия сеансов. Мы обнаружили, что это расширение очень хорошо работает как в CE, так и в EE.
При использовании DB, по умолчанию срок действия чернослива составляет 1 неделя, поэтому в качестве примера приведенного выше размера хранилища (30 тыс. Уникальных единиц в день) вы будете смотреть на размер таблицы БД для core_cache_session около 7 ГБ, который будет расти Ваш магазин полностью остановлен, почти для каждой операции на основе сеанса.
Исходя из опыта хостинга как крупных (230 000 уникальных посетителей в день), так и небольших (<1 000 уникальных посетителей в день) магазинов, мы рекомендуем:
Развертывание на одном сервере - файлы
Развертывание на нескольких серверах - Redis (с использованием отдельной базы данных из основного кэша Magento)
Я написал несколько действительно подробных ответов здесь http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
источник
Я задал связанный вопрос некоторое время назад:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
То, что я никогда не узнал (я оставил эту работу для новой, а исходная проблема стала чьей-то другой), так это то, будут ли сеансы Magento соответствовать этим настройкам, или если они реализуют обработку своих сеансов с использованием Zend (и, предположительно, своего рода zend.ini). файл конфигурации).
Настройки php для просмотра:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
источник
Обычно работы cron достаточно, но вот несколько вещей, о которых следует помнить:
1) Установите продолжительность сеанса не более
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) секунд (это настроит сеансы с истекшим сроком, которые будут подготовлены для сборки мусора php.ini или .htaccess)2) Возможно, вы захотите сохранить сеансы в базе данных, см. Здесь для получения дополнительной информации о том, как это сделать (эта опция может быть проще управлять с помощью пользовательского модуля magento)
3) Другим вариантом, который стоит рассмотреть, является то, что Memcached Witch может также ускорить работу серверов (хотя и не полностью связанных с вопросом, я думаю, что это полезно знать)
См. Этот вопрос для получения дополнительной информации: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
источник
find
хранит все файлы старшеsess.gc_maxlifetime
и удаляет их. Удаление сеансов через cron - это нормальное, безопасное и приемлемое поведение.session.gc_probability
иsession.gc_divisor
. Если разные сценарии имеют разные значения, дляsession.gc_maxlifetime
одного с наименьшим значением будет определяться, как долго будет зависать содержимое, поскольку хранилище сеансов является глобальным, и выполнение этого сценария очистит другие объекты сеансов сценариев.Во всех наших настройках у нас есть файл maintenance.php, который время от времени занимается очисткой журналов и каталога var. Поскольку сеансы должны быть либо сохранены в базе данных, либо в файловой системе, этот файл обслуживания очистит их обоих. (См. Код ниже).
Вы можете запустить следующую команду как задание cron для очистки журналов:
Приведенная выше команда выдаст следующий вывод:
Вы можете запустить следующую команду как задание cron для очистки папки var:
Приведенная выше команда выдаст следующий вывод:
Фактический код (не забудьте указать путь к файлу local.xml):
источник
Для Magento CMS и тому подобного (которые не очищают старые сессии) я просто использую задания cron на основе настроек php.ini.
PHP5 / Ubuntu 14.04 / Debian
Системная настройка cron.d для php5 не очищает Magento ./var/session (или что-либо, кроме папки сеанса по умолчанию (/ var / lib / php5 для Ubuntu и / var / lib / php5 / session или / tmp / для большинства других Linux). dists).
Но вы все равно можете использовать «sessionclean» и «maxlifetime» в соответствии с системным cron по умолчанию php5 / Debian:
Пример, который вы можете попробовать из командной строки:
Просто включите это в системный / корневой каталог или в пользовательский файл, у которого есть права на чтение / запись для файлов сеанса:
Добавьте это, вы хотите, чтобы это выглядело как системный php cron:
или - поскольку мы знаем, что эти файлы / каталоги существуют:
Теперь у меня есть управляемое количество сеансов, и оно поддерживается в чистоте с помощью сборки мусора / времени жизни по умолчанию с помощью настроек php.ini (cli).
(Вы можете оставить подстановочный знак выше или заменить на sitename.)
РЕДАКТИРОВАТЬ (PHP7 / Ubuntu 16.xx / Debian):
Сценарий 'sessionclean' был изменен, а скрипт maxlifetime был удален. Для задания system / php cron теперь это один скрипт. Вы больше не можете использовать это, поскольку вызовы файлов теперь статичны для скрипта.
Более старый сценарий php5 sessionclean все еще может работать для вас, если система не очищается . Что вы можете сделать, это взять старый пакет Debian php5 и извлечь
sessionclean
его. Или вы можете просто скопировать это в свою область сценариев (предоставив надлежащие права / владелец / var / www / (site)):Я также рекомендую переименовать его, чтобы он не путался с новым php 'sessionclean' cronjob. Затем вы можете подключить свой собственный номер «maxlifetime» следующим образом:
(61 - это пример возраста (в минутах), а «MySessionClean» - переименованный скрипт php5, загруженный или скопированный сверху).
Таким образом, мы полностью избегаем вызовов php.ini / env.
(РЕДАКТИРОВАТЬ 13 ДЕКАБРЯ 2016 ГОДА: обновлена ССЫЛКА РЕПО РЕГИОНА DEBIAN)
источник
Я регулярно очищал БД от всех этих старых файлов сессий. Ручная работа была раздражающей, пока я не установил Magento Optimizer, который делает всю эту рутинную работу для меня. Кроме того, мой кэш постоянно обновляется, и я не делаю это вручную после изменения продуктов и статических блоков. О да, сообщения об ошибках и заброшенные корзины также убираются.
источник
Из всех вышеприведенных комментариев я думаю, что это простое решение, и надеюсь, что оно лучше, чем длинные сценарии и установка стороннего расширения для управления старыми файлами сессий и хранения новых файлов сессий.
magento
папке.источник
В моем случае я запускаю этот скрипт, расположенный в
magento/var/
каталоге, для удаления файлов сессий старше одной недели (-mtime +7
):Это мой первый скрипт bash (редакция 2), и я думаю, что его можно оптимизировать в нескольких аспектах. Я открыт для любых предложений по оптимизации.
Этот скрипт можно получить по адресу: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2.
источник
Я создал скрипт, который очищает каталог var / session. Вы можете добавить его в задание cron, чтобы запускать его раз в день, которого должно быть достаточно, и при необходимости корректировать. Вы заметите, что когда каталог вашей сессии заполнен, невозможно удалить файлы с помощью cpanel или ssh, этот скрипт просто сделает свое дело в корневом каталоге magento.
источник