Назад | Перейти на главную страницу

Дисковые иноды заполнены из-за сеансов PHP

Мы боремся с этой проблемой уже более 2 лет. У нас есть интернет-магазин, который использует сеансы PHP для хранения пользовательских корзин и другой информации. Проблема в том, что через некоторое время на сервере закончатся дескрипторы диска, даже если на диске сервера останется много свободного места. Тогда это приведет к сбою всего сервера, потому что мы не сможем ничего записать на диск.

Мы много раз обращались с этой проблемой в нашу компанию по управлению серверами, но нам ответили, что нам нужно удалить некоторые сеансы, чтобы освободить inodes. Проблема в том, что каждый раз, когда мы это делаем, покупатели теряют свои корзины.

Как можно решить эту проблему? Запись сеансов PHP в базу данных потребует слишком больших изменений кода, и мы не можем увеличить количество inode, не начав заново с другого сервера.

У нас уже есть задание cron по удалению файлов сеансов, которые не были изменены за последний месяц, но этого недостаточно, и поскольку веб-сайт продолжает расти, проблемы с inode возникают все чаще.

С точки зрения системы на реальном оборудовании решение состоит в создании новой файловой системы с другим inode_ratio или даже новый тип файловой системы, предназначенный для обработки большого количества небольших файлов. Ваш хостинг-провайдер может предоставлять или не предоставлять эту функцию, если вы используете облачное, а не размещенное в одном месте HW или «выделенные» VPS. СМ. РЕДАКТИРОВАТЬ НИЖЕ

Если вы можете изменить код системы покупок, вам следует сохранить тележки для зарегистрированных пользователей в базе данных, позволить сеансу истечь как обычно и очистить старые файлы сеанса. Сеансы должны иметь относительно короткий срок службы, и файлы сеансов должны регулярно очищаться / удаляться для старых неактивных сеансов.

Хранение информации в БД имеет множество преимуществ - как технологических (проще разделить нагрузку на веб-сервер по CDN), так и деловых целей («эй, у вас уже был этот элемент в вашем списке желаний, и его почти нет в наличии - Купи сейчас! »электронные письма заставляли меня открывать кошелек не раз), и я бы пошел именно в этом направлении. Но по крайней мере начните удалять старые просроченные файлы сеанса ....

Изменить, чтобы добавить -

Один из хакерских способов получения новой файловой системы - создать разреженный файл подходящего размера, отформатировать его с помощью выбранной файловой системы и смонтировать в настройке с обратной связью. Конечно, для этого вам понадобится достаточно места и т. Д.

Zebra Session действует как оболочка для функций обработки сеансов PHP по умолчанию, но вместо хранения данных сеанса в плоских файлах он хранит их в базе данных MySQL, обеспечивая лучшую безопасность и производительность.

это добавляемая и не имеющая стыков замена обработчику сеанса PHP по умолчанию: сеансы PHP будут использоваться так же, как и до использования библиотеки; вам не нужно менять существующий код!

https://github.com/stefangabos/Zebra_Session

Именно то, что я искал.

Другое решение: https://stackoverflow.com/questions/36753513/how-do-i-save-php-session-data-to-a-database-instead-of-in-the-file-system

Должна быть возможность перенести файлы сеанса PHP на новый сервер.

Это предполагает, что стоит потратить усилия на переход на новый сервер, который имеет ресурсы (inodes), которые могут справиться с ожидаемым ростом трафика в течение приемлемого периода времени.

Файлы сеанса хранятся в session.save_path установка в php.ini.