Мы боремся с этой проблемой уже более 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
.